2

私はpythonの初心者です。私はフィボナッチ関数を作る型を見ていましたが、

def fib(n):
a=0
b=1
while a<n:
    print a
    a,b=b,a+b

a,b=b,a+b 宣言を見ました。それで、a=b と b=a+b は a,b=a,b+a と同じだと思ったので、関数を次のように変更しました。

def fib(n):
a=0
b=1
while a<n:
    print a
    a=b
    b=a+b

と思ったのですが、プログラムを実行してみると、違う出力が得られました。この 2 種類の宣言の違いを説明してもらえますか?

とにかくありがとう。

4

4 に答える 4

1

b, a+bこれら 2 つの値を含むタプルを作成します。次にa, b = ...、タプルをアンパックし、その値を変数に割り当てます。ただし、コードでは最初の値を上書きするため、2 行目は新しい値を使用します。

a, b = b, a + b

はほぼ次のようになります。

tmp = a
a = b
b = tmp + b
于 2012-11-12T21:36:31.183 に答える
1

Python の実行時

a,b = b, a+b

最初に右辺を評価し、次にタプルをアンパックして値をaandに割り当てますba+b右側で に古い値を使用していることに注意してくださいa

Python の実行時

a=b
b=a+b

を評価bし、その値を に割り当てますa。次に、a+bその値を評価して に割り当てますbに新しい値をa+b使用していることに注意してください。a

于 2012-11-12T21:36:44.803 に答える
0

その構文は、現在の値に新しい値を割り当て、それに基づいて同時に割り当てaますb。同等ではない理由は、2 つの別個のステートメントを記述すると、2 番目の代入で の古い値ではなく の新しい値が使用されるためです。aa

于 2012-11-12T21:36:39.660 に答える
0

最初の例では、a は行全体が評価されるまで b の値を取るように更新されません。つまり、b は実際には a + b です。

あなたの例では、すでに a を b に設定しているため、最後の行 (b=a+b) は簡単に b=b+b にすることができます。

それはすべて、物事が評価される順序です。

于 2012-11-12T21:37:30.413 に答える