有一个标准化的方法来交换Python中的两个变量吗?
在Python中,我已经看到了使用这个语法交换的两个变量值:
left, right = right, left
这被认为是交换两个变量值的标准方法,还是有其他一些方法,通过这个方法两个变量按照惯例通常是交换的?
Python从左向右评估表达式。 请注意,在评估分配时,右侧将在左侧进行评估。
http://docs.python.org/3/reference/expressions.html#evaluation-order
这意味着下面的表达式a,b = b,a
:
- 在右边
b,a
被评估,也就是说在存储器中创建了两个元素的元组。 这两个元素是由标识符b
和a
指定的对象,它们是在执行程序期间指令被执行之前存在的对象 - 刚创建这个元组之后,这个元组对象的分配还没有完成,但没关系,Python内部知道它在哪里
- 然后评估左侧,也就是说元组被分配到左侧
- 由于左侧是由两个标识符组成的,所以元组被解包,以便将第一标识符
a
分配给元组的第一个元素(因为它具有名称b
所以它是在交换之前b的对象)
而第二个标识符b
被分配给元组的第二个元素(这是之前交换的对象,因为它的标识符是a
)
这种机制有效地交换了分配给标识符a
和b
的对象
所以,回答你的问题是:是的,这是在两个对象上交换两个标识符的标准方式。
顺便说一下,对象不是变量,它们是对象。
这是交换两个变量的标准方式,是的。
我知道三种交换变量的方法,但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
我不会说这是一个标准的交换方式,因为它会导致一些意想不到的错误。
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
nums[i]
将首先被修改,然后影响第二个变量nums[nums[i] - 1]
。