2016-11-03 56 views
3

在观看video解释关于一个测验,我发现这个代码片段:为什么不执行“a,x = x,a”会导致两次值更改?

a, x = x, a 
a, x = x, a 
print a 
print x 

的视频说,最终的结果是xa交换,如果我们说再这样做,这将是在原不改变任何变量值的地方。

我的问题是,如果我第一次分配a =>xx =>a,那么代码的价值是不会,即使我们做同样的代码进行更改,并为同一分配相同的值像我之前做的那样变化。但为什么视频解释说ax的值将被执行两次并在执行语句之前得到相同的值?

+0

对于第一个问题,只要你做的'X = A',你已经失去了x'的'的值,如果它没有被分配给其他地方,所以他们couldn互换。您需要第三个变量(通常称为'temp')来保存'x'的值来进行交换;除非我错过了某种边缘技术来实现这一点。 – Carcigenicate

+3

'a = x,x = a'是一个错误。你是不是指'a,x = x,a'? –

+1

@Carcigenicate你可以很容易地使用a,x = x,a来不需要临时变量。 – Whud

回答

4

语法a,x = x,a将交换值,因为首先评估赋值运算符右侧的赋值(=),然后将其赋值给它们的值,如here所述。从逻辑上说,如果这个操作执行了两次,那么第二个交换将这些变量返回到它们的原始值。

注意,如果不是你写a = x; x = a然后ax都将最终为x起始值,因为每个语句中进行评价,从左至右。

示范:

>>> a = 1 
>>> x = 2 
>>> a,x = x,a 
>>> a,x 
(2, 1) 
>>> 
>>> a = 1 
>>> x = 2 
>>> a = x; x = a 
>>> a,x 
(2, 2) 
+1

从句法上讲,“a,x = x,a”的右侧创建一个包含两个元素的元组,然后左侧将元组解包为两个变量。但是,从Python 2.6开始,内部优化可以识别这种常见的习惯用法,并跳过创建元组。 – jasonharper

相关问题