-3

return私にはその発言を理解するのは難しいです。

以下のブール値テストif not test(a)は false (つまりif test(a)is true) であり、else ステートメントは b を返します。

でも、 が戻った直後に、 値aを に書き換えaますね。

def proc4(a, b):
    if not test(a):
        b = 'udacity'
    else:
        return b
    return a
4

7 に答える 7

5

これは、人々が遭遇する非常に一般的な問題です:関数に複数の戻り点がある場合、それはどういう意味ですか?

複数の返品が発生するかどうかについての議論はさておき、実際には複数の返品が発生します。覚えておくべき重要なことは次のとおりです。

関数は、返されるとすぐに終了します。

私がよく知っているすべての最新のプログラミング言語では、関数がリターン ポイントに達するとすぐに処理を終了します*。戻り値がある場合は、関数が最初に呼び出された場所に戻されます。Python も例外ではありません。

あなたの関数には、読みにくくするために少し余分ながらくたがありますが、これは役に立ちません。具体的には、b割り当てられた値が使用されないため、への割り当てはまったく不要です。複数の戻り値について説明しながら、わかりやすくするために関数を次のように書き直すことができます。

def proc4(a, b): # line 1
    if test(a):  # line 2
        return b # line 3
    return a     # line 4

今何が起こるかはこれです。それが 2 行目にtest(a)評価されるとします。ブロックにTrue入り、 3 行目に遭遇します。この関数は、どこから呼び出されても to の値を返し、実行が終了します。4 行目は実行されません。ifreturn bb

あるいは、 とtest(a)評価された場合は、ブロックFalseに入りません。ifこの場合、3 行目をスキップして 4 行目に進みます。次に、4 行目を実行し、呼び出されaた場所に toの値を返します。proc4

finally*多くの言語など、特定のフロー制御ステートメントがあり、return ステートメントが検出された後に関数内のコードが実行される可能性があります。簡単にするために、またトピックから外れているため、この回答では説明しません。これを見逃したことを指摘してくれた@Racsoに感謝します!

于 2013-07-24T23:18:59.730 に答える
3

の場合、test(a)False設定b'udacity'return a

このように書いても構いません。

def proc4(a, b):
    if not test(a):
        b = 'udacity'
        return a
    else:
        return b
于 2013-07-24T22:51:30.530 に答える
3

しかし、それが戻った直後a

すでに返されていない場合b。return-statement が 1 つ検出されると、関数の実行が終了し、値が返されます。

于 2013-07-24T22:52:18.593 に答える
2

あなたの関数はこのようにもっと明確に書かれているかもしれません:

def proc4(a, b):
    if test(a):
        return b
    else:
        return a

それはあなたがロジックを理解するのに役立ちますか?

于 2013-07-24T22:54:51.413 に答える
1

私もプログラミング初心者の頃は復帰に戸惑いました。実際、それはかなり単純です。電卓アプリケーションがあるとします。追加関数は次のとおりです。

def add(x,y):
    return x+y
answer = add(1,1)

答えは 2 です。関数は操作を実行し、変数であるかのように値を返します。関数は、値として変数に割り当てることができます。

あなたの質問に: a が真でない場合、b は udacity に等しくなりますが、返されず、 a が返されます。それ以外の場合は b が返されます。

于 2013-07-24T22:56:26.863 に答える
1

の場合、関数は parameter の元の値を返しtest(a)ます。trueb

の場合、関数は parameter の元の値を返しtest(a)ます。falsea

「元の値」とは、関数が受け取る値を意味します。

于 2013-07-24T22:51:39.013 に答える