0

重複の可能性:
Python での複数の割り当て

C で始めて以来、コンピュータ上で 1 つのスレッドで作業している間、すべての操作が 1 つずつ行われることを学びました。

Python 3 言語に疑問があります。次の式を使用して変数値を交換するコードを見てきました。

a,b = b,a

または、以下を使用するフィボナッチ数列の場合:

a,b = b,a+b

これらはどのように機能しますか?しかし、それらは機能します:O

Python システムは、これらの一時変数を内部的に作成しますか? 両方が効果的に正しい結果を与えるための割り当ての順序は何ですか?

よろしく、 ニキル

4

3 に答える 3

4

大まかに言えば、左側と右側の 2 つのタプルを作成し、右側のタプルを左側に割り当てます。これにより、変数が 1 つずつ反対の値に変更されます。Python は高水準言語であるため、C などの言語と比較すると、このような抽象化が多くなります。

dis低レベルでは、関数の Python バイトコードを表示できるモジュールを使用して、何が起こっているかを非常に明確に確認できます。

>>> import dis
>>> def test(x, y):
...     x, y = y, x
... 
>>> dis.dis(test)
  2           0 LOAD_FAST                1 (y)
              3 LOAD_FAST                0 (x)
              6 ROT_TWO             
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE     

何が起こるかというとROT_TWO、スタック上の項目の順序を交換するために使用されます。これは、これを行う非常に効率的な方法です。

于 2012-12-18T11:21:51.407 に答える
0

と を使用したフィボナッチの例a=1からb=1。最初に、右側が評価さb,a+bれ、タプルが生成され(1,2)ます。次に、右辺が左辺、つまりaとに割り当てられbます。そうです、右側の評価はメモリに保存され、これらの新しい値を指すように変更されますab

于 2012-12-18T11:23:25.653 に答える
0

あなたが書くときa, b、あなたは作成しますtuple

>>> 1, 2
(1, 2)

したがって、評価順序に特別なことはありません。

于 2012-12-18T11:19:09.740 に答える