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


回答:


100

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

たとえば、との両方print()を使用する関数はreturn次のとおりです。

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

これで、fooを呼び出すコードを次のように実行できます。

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

これを.pyPythonインタープリターではなくスクリプト(ファイルなど)として実行すると、次の出力が得られます。

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関数の実行を停止し、呼び出されたものに値を返します。


使用する必要がある"foo returned " + str(x)か、そうでなければ取得しTypeError: cannot concatenate 'str' and 'int' objectsます。
icktoofay 2011

@NathanHughes丁寧に作成された回答に感謝します。
アンディK

23

辞書はここであなたの最高のリファレンスだと思います

返品して印刷

要するに:

return は、何かが返されるか、関数の呼び出し元に応答ますが、print はテキストを生成します


23

印刷ステートメントを副作用の原因と考えてください。これにより、関数はユーザーにテキストを書き出させますが、別の関数では使用できません

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

ウィキペディアの関数の定義は次のとおりです

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

少し考えてみてください。関数に値があるとはどういう意味ですか?

つまり、関数の値を通常の値に実際に置き換えることができるということです。(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は、自分で入れない場合、実際には戻り値を挿入します。これは「なし」と呼ばれ、単に何もしないかnullを意味する特別な型です。


12

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

この回答は、上記で説明されていないいくつかのケースを網羅しています。リターン文は、あなたがすることができます終了しあなたが最後に到達する前に、関数の実行を。これにより、実行フローが呼び出し元にすぐに戻ります。

行番号4:

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

条件ステートメントが実行された後、ret()関数はreturn temp(4行目)のために終了します。したがって、print("return statement")は実行されません。

出力:

two digits   

条件ステートメントの後に表示されるこのコード、または制御のフローが到達できない場所は、デッドコードです。

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

印刷返品の違いを引き出すには:

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

出力:

two digits
'two digits'

10

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

print 「この値を(通常は)stdoutに送信する」

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

これは印刷の例です:

>>> 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
>>>

これは返品の例です:

>>> 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
>>>

8

@Nathan Hughesの素晴らしい答えに追加するだけです:

このreturnステートメントは、一種の制御フローとして使用できます。return関数の真ん中に1つ(または複数)のステートメントを置くことで、「この関数の実行を停止します。必要な結果が得られたか、問題が発生しました!」

次に例を示します。

>>> 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!

この使用方法の詳細については、Pythonガイドのコードスタイルのセクションをご覧くださいreturn


4

「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


1
ええと、あなたが提供したテストケースであなたの印刷コードは失敗しませんでした。彼らはすべて正しかった!
codebryan

3

これが私の理解です。(それが誰かを助け、それが正しいことを願っています)。

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でインデントされていることがわかります。値(count + 1)を0に置き換えます。returnコマンドをインデントするときにコードのロジックに従ってみると、出力は常に1になります。 、最初のカウントを変更するように指示することは決してないからです。私はそれが正しいと思います。ああ、そしてreturnは常に関数の中にあります。


3

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

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

例:

def timestwo(x):
    return x*2

3

私は本当に簡単な答えがここで役に立つかもしれないと思います:

return値(多くの場合、変数)を呼び出し元が使用できるようにします(たとえば、使用する関数が含まれている関数によって格納されるreturn)。なければreturn、あなたの値または変数は、ストア/再利用への呼び出し元に対する利用できないでしょう。

print 画面に出力しますが、値または変数を呼び出し元が使用できるようにしません。

(より完全な答えがより正確であることを完全に認めます。)


2

return関数の最も良いところは、関数から値を返すことができますが、同じことを行うことができるprintので、違いは何ですか?基本的にはreturnおよそただ、我々は任意の変数に関数からその戻り値を保存することができますが、我々が行うことができないように、それはオブジェクト形式で出力を与える返さないprintように、その同じstdout/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 + b(でadd)と言う最後の行です。これは次のとおりです。

  1. 私たちの関数は二つの引数で呼び出されますab
  2. 関数が何をしているか、この場合は「ADDING」を出力します。
  3. 次に、Pythonに何らかの逆の処理を行うように指示しますa + b。の追加を返します。これを「追加aしてbから返す」と言うかもしれません。
  4. Pythonは2つの数値を加算します。次に、関数が終了すると、その関数を実行するすべての行で、このa + b結果を変数に割り当てることができます。

1

return以下のために使用すべきである再帰関数/メソッドや、あなたのアルゴリズムでは、後でアプリケーションに返された値を使用します。

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

次のコードはreturnprint適切に使用する方法を示しています。

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

print(fact(5))

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.