web-dev-qa-db-ja.com

returnステートメントの目的は何ですか?

Return文とは何か、そのPythonでの使い方の簡単な基本説明は何ですか?

それとprintステートメントの違いは何ですか?

70
Hitesh Kumar

print()関数はコンソールに文字列を書く、すなわち「プリントする」。 returnステートメントを使用すると、関数は終了し、値を呼び出し元に渡します。一般的に関数のポイントは入力を取り込んで何かを返すことです。 returnステートメントは、関数が呼び出し元に値を返す準備ができているときに使用されます。

例えば、これはprint()returnの両方を利用する関数です。

def foo():
    print("hello from inside of foo")
    return 1

これで、fooを呼び出すコードを実行できます。

if __== '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned " + str(x))

Pythonインタプリタではなくスクリプト(例えば.pyファイル)としてこれを実行すると、次のような出力が得られます。

going to call foo
hello from inside foo
called foo   
foo returned 1

これが明確になることを願っています。インタプリタはコンソールに戻り値を書き込むので、誰かが混乱する可能性があるのか​​どうかがわかります。

これを示すインタプリタからの別の例を次に示します。

>>> def foo():
...     print("hello from within foo")
...     return 1
...
>>> foo()
hello from within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello from within foo
10

foo()bar()から呼び出されたとき、コンソールに1が書き込まれていないことがわかります。代わりに、bar()から返される値を計算するために使用されます。

print()は副作用(コンソールに文字列を書き込む)を引き起こす関数ですが、実行は次のステートメントから再開されます。 returnを指定すると、関数は実行を停止し、呼び出した関数に値を返します。

87
Nathan Hughes

私は辞書がここであなたの最もよい参照であると思います

Return および Print

要するに:

returnは、返事またはを返す関数の呼び出し元whileprintはテキストを生成します

22
Kimvais

Printステートメントが副作用を引き起こすと考えると、関数はユーザーにテキストを書き出させますが、それはありえません他の関数によって使用されます

いくつかの例と、ウィキペディアからのいくつかの定義を使って、これをよりよく説明しようと思います。

これがウィキペディアの関数の定義です。

数学では、関数はある量(入力とも呼ばれる関数の引数)を別の量(出力とも呼ばれる関数の値)に関連付けます。

ちょっとそれについて考えてください。関数に値があると言った場合、どういう意味ですか?

それが意味することはあなたが実際に通常の値で関数の値を代用できるということです! (2つの値が同じタイプの値であると仮定)

なぜあなたはあなたが尋ねることを望みますか?

入力と同じタイプの値を受け入れることができる他の関数についてはどうですか?

def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

出力を生成するために入力にのみ依存する関数には、派手な数学用語があります。参照透明度。繰り返しますが、ウィキペディアからの定義です。

参照透明度および参照不透明度は、コンピュータプログラムの一部の特性です。プログラムの振る舞いを変えずに式をその値で置き換えることができる場合、その式は参照的に透過的であると言われます

プログラミングが初めての場合、これが何を意味するのか理解するのは少し難しいかもしれませんが、私はあなたがいくつかの実験の後にそれを得るだろうと思います。ただし、一般的には、関数内でprintなどのことを実行できます。また、最後にreturn文を含めることもできます。

あなたがreturnを使うとき、あなたは基本的に「この関数の呼び出しは返される値を書くのと同じである」と言っていることを覚えていてください

あなたがあなた自身のものに置くことを断った場合、Pythonは実際にあなたのために戻り値を挿入するでしょう。それは "None"と呼ばれます、そしてそれは単に何も意味しない、あるいはnullを意味する特別な型です。

21
Wes

Pythonでは、関数の定義を "def"で始めますが、一般的に、必ずしもそうとは限りませんが、関数を "return"で終了させます。

変数xの関数はf(x)として表される。この機能は何をしますか?この関数がxに2を加えるとします。だから、f(x)= x + 2

さて、この関数のコードは次のようになります。

def A_function (x):
    return x + 2

関数を定義したら、それを任意の変数に使用して結果を得ることができます。といった:

print A_function (2)
>>> 4

次のように、コードを少し違った形で書くことができます。

def A_function (x):
    y = x + 2
    return y
print A_function (2)

それはまた「4」を与えるでしょう。

今、私たちはこのコードを使うことさえできます:

def A_function (x):
    x = x + 2
    return x
print A_function (2)

それはまた4を与えるでしょう。戻り値の横の "x"は実際には(x + 2)を意味し、 "A_function(x)"のxではないことを見てください。

この簡単な例から、returnコマンドの意味がわかります。

11

上で議論されていないケース。
return文を使用すると、最後に到達する前に終了関数の実行を実行できます。フロー実行はすぐに呼び出し元に戻ります。

9行目:

def ret(n):
    if n > 9:
         temp = "two digits"
         return temp     #Line 4        
    else :
         temp = "one digit"
         return temp     #Line 8
    return     #Line 9
    print ("return statement")
ret(10)

条件文が実行された後、関数ret()returnのため終了します。 - )(9行目)したがって、print( "return statement")は実行されません。

 output : two digits   

return文または制御の流れに達していない場所の後に表示されるこのコードは、デッドコードです。

戻り値
4行目と8行目では、条件が実行された後でreturnステートメントを使用して一時変数の値を返しています。

printreturnの違いを引き出すには:

 def ret(n):
     if n > 9:
         print("two digits")
         return "two digits"           
     else :
         print("one digit")
         return "one digit"    
     return       
ret(25)


output : two digits
        'two digits'
9
BoRRis

returnは、「この関数からこの値を出力する」という意味です。

printは、「この値を(通常は)stdoutに送信する」という意味です。

Python REPLでは、デフォルトで関数の戻り値が画面に出力されます(これはprintとまったく同じではありません)。

これはprintの例です。

>>> n = "foo\nbar" #just assigning a variable. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

これはreturnの例です。

>>> def getN():
...    return "foo\nbar"
...
>>> getN() #When this isn't assigned to something, it is just output
'foo\nbar'
>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>
9
cwallenpoole

@Nathan Hughesのすばらしい答えに付け加えると、

returnステートメントは一種の制御フローとして使用できます。 1つ(または複数)のreturnステートメントを関数の途中に置くことで、「この関数の実行を停止します。必要なものを入手したか、何か問題がありました。

これが例です:

>>> def make_3_characters_long(some_string):
...     if len(some_string) == 3:
...         return False
...     if str(some_string) != some_string:
...         return "Not a string!"
...     if len(some_string) < 3:
...         return ''.join(some_string,'x')[:,3]
...     return some_string[:,3]
... 
>>> threechars = make_3_characters_long('xyz')    
>>> if threechars:
...     print threechars
... else:
...     print "threechars is already 3 characters long!"
... 
threechars is already 3 characters long!

このreturnの使い方の詳細については、Pythonガイドの コードスタイルセクション を参照してください。

8
LondonRob

"return"と "print"の違いは、次の例にもあります。

戻る:

def bigger(a, b):
    if a > b:
        return a
    Elif a <b:
        return b
    else:
        return a

上記のコードはすべての入力に対して正しい結果を与えます。

印刷:

def bigger(a, b):
    if a > b:
        print a
    Elif a <b:
        print b
    else:
        print a

注:これは多くのテストケースで失敗します。

エラー:

----  

FAILURE: Test case input: 3, 8.

            Expected result: 8  

FAILURE: Test case input: 4, 3.

            Expected result: 4  

FAILURE: Test case input: 3, 3.

            Expected result: 3  

You passed 0 out of 3 test cases

4
Pj_

これが私の理解です。 (それが誰かに役立つことを願っています、そしてそれは正しいです)。

def count_number_of(x):
    count = 0
    for item in x:
        if item == "what_you_look_for":
        count = count + 1
    return count

したがって、この簡単なコードでは、何かが発生した回数を数えます。リターンの配置は重要です。それはあなたのプログラムにどこで値が必要なのかを伝えます。そのため、印刷すると、画面に出力が送信されます。あなたが戻ったとき、あなたはどこかに行くように値を伝えます。この場合、count = 0がreturnでインデントされていることがわかります - returnコマンドをさらにインデントするときにコードのロジックに従うと、出力は常に1になります初期の数を変更するように言うことは決してないからです。正しかったと思います。ああ、そしてreturnは常に関数の中にあります。

3
piotrektt

returnは関数定義の一部ですが、printはテキストを標準出力(通常はコンソール)に出力します。

関数は、パラメータを受け入れて値を返すプロシージャです。 returnは後者のためのもので、前者はdefで行われます。

例:

def timestwo(x):
    return x*2
3
icarito

returnは、recursive関数/メソッドに使用する必要があります。そうでない場合は、アルゴリズム内の後のアプリケーションに戻り値を使用する必要があります。

printは、意味のある望ましい出力をユーザーに表示したい場合や、ユーザーが興味のない中間結果を画面に表示したくない場合に使用します。ただし、コードのデバッグには役立ちます。

次のコードは、returnおよびprintを正しく使用する方法を示しています。

def fact(x):
    if x < 2:
        return 1
    return x * fact(x - 1)

print(fact(5))

この説明はpythonだけでなく、すべてのプログラミング言語に当てはまります。

1
Habib Karbasian

return関数の最も良いところはあなたがfunctionから値を返すことができるということですが、あなたはprintで同じことができるので違いは何ですか?基本的にreturnはそれを返すだけではなくオブジェクト形式で出力するので、その戻り値を関数から任意の変数に保存することができますが、printstdout/coutC Programmingと同じように使用できません。

理解を深めるために以下のコードに従ってください

コード

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

def subtract(a, b):
    print "SUBTRACTING %d - %d" % (a, b)
    return a - b

def multiply(a, b):
    print "MULTIPLYING %d * %d" % (a, b)
    return a * b

def divide(a, b):
    print "DIVIDING %d / %d" % (a, b)
    return a / b


print "Let's do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)


# A puzzle for the extra credit, type it in anyway.
print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "That becomes: ", what, "Can you do it by hand?"

add, subtract, multiply,divideのために独自の数学関数を実行しています。注意すべき重要なことは、return a + badd内)と言う最後の行です。これがすることは以下の通りです:

  1. この関数は2つの引数abで呼び出されます。
  2. 私たちの機能が何をしているのか、この場合は "ADDING"を出力します。
  3. それから、Pythonに何か後ろ向きのことをするように伝えます:a + bの追加を返します。これを「私はabを追加して返します」と言っているかもしれません。
  4. Pythonは2つの数字を足し合わせます。その後、関数が終了すると、それを実行するすべての行がこのa + b結果を変数に割り当てることができます。
1
Vrushal Raut