17
シンプルで短い質問です。 Pythonで2つの変数を交換するのはとても簡単です:a, b = b, a
。それは大丈夫です、私は反対がありません:)しかし、私はそれが内部的にどのように動作するのか興味がありますか?一時的な変数を単独で作成するのか、それとももっと興味深い(私はそうだと思いますか?)可変スワップは内部的にどのように機能しますか?
シンプルで短い質問です。 Pythonで2つの変数を交換するのはとても簡単です:a, b = b, a
。それは大丈夫です、私は反対がありません:)しかし、私はそれが内部的にどのように動作するのか興味がありますか?一時的な変数を単独で作成するのか、それとももっと興味深い(私はそうだと思いますか?)可変スワップは内部的にどのように機能しますか?
Pythonのソースコードは、実行前にbytecodeに変換されます。あなたはスワップバイトコードがどのように見えるかを確認するために逆アセンブラdis
を使用することにより、内部でどのように機能するかを見ることができます。簡単に言えば
import dis
>>> def f(a,b): a, b = b, a
>>> dis.dis(f)
1 0 LOAD_FAST 1 (b)
3 LOAD_FAST 0 (a)
6 ROT_TWO
7 STORE_FAST 0 (a)
10 STORE_FAST 1 (b)
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
、それがスタックにaとbの値をプッシュし、回転(スワップ)トップ2つの要素を選択し、値を再びポップします。
も参照してください:
すごいです!トリックはROT_TWOです...ありがとうございました! –