402

Python では、次の構文を使用して 2 つの変数値が入れ替わっているのを見てきました。

left, right = right, left

これは2つの変数値を交換する標準的な方法と考えられていますか、それとも慣例により2つの変数が最も通常交換される他の手段はありますか?

4

8 に答える 8

482

Python は式を左から右に評価します。代入を評価する際、右側が左側より先に評価されることに注意してください。

Python ドキュメント: 評価順序

これは、式 について次のことを意味しますa,b = b,a

  • 右辺b,aが評価されます。つまり、2 つの要素のタプルがメモリに作成されます。2 つの要素は、プログラムの実行中に命令が検出される前に存在していた識別子bおよびによって指定されたオブジェクトです。a
  • このタプルの作成直後、このタプル オブジェクトの割り当てはまだ行われていませんが、問題ではありません。Python は内部的にそれがどこにあるかを認識しています。
  • 次に、左辺が評価されます。つまり、タプルが左辺に割り当てられます。
  • 左辺は 2 つの識別子で構成されているため、最初の識別子aがタプルの最初の要素に割り当てられるようにタプルがアンパックされます (これはname を持っていたため、スワップ前は以前はbbだったオブジェクトです)
    。 2 番目の識別子bは、タプルの 2 番目の要素に割り当てられます (これは、識別子が であったため以前はスワップ前であったオブジェクトですa) 。

このメカニズムにより、識別子に割り当てられたオブジェクトが効果的に交換されab

したがって、あなたの質問に答えるには: はい、2 つのオブジェクトで 2 つの識別子を交換する標準的な方法です。
ところで、オブジェクトは変数ではなく、オブジェクトです。

于 2013-02-12T15:56:33.150 に答える
123

これは、2 つの変数を交換する標準的な方法です。

于 2013-02-12T15:44:22.827 に答える
42

変数を交換する 3 つの方法を知っていますa, b = b, aが、最も簡単な方法です。がある

XOR (整数の場合)

x = x ^ y
y = y ^ x
x = x ^ y

または簡潔に言うと、

x ^= y
y ^= x
x ^= y

一時変数

w = x
x = y
y = w
del w

タプルスワップ

x, y = y, x
于 2016-01-06T23:34:40.287 に答える