2016-08-02 64 views
-1

我是Udacity的计算机科学入门课程的新手。关于交换价值的问题我们有一个相当简单的问题,我不太明白。下面是问题:交换价值

以下哪个语句序列使变量X的值与语句之前的值相同?假设a和x都指代这个代码之前的整数值。

为什么这是真的?

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

例如,如果我有:

a,x = 4,5 

然后 一个= 4且x = 5

对于第二部分:

a,x = 5, 4 

则a = 5和x = 4 所以x不等于之前的情况。有人能解释为什么这是真的吗?

+0

另外,对于这两个语句,您应该使用'a,x = x,a',而不是用您选择的随机整数替换'x'和'a'。 – 3442

+1

这些陈述都没有对他们有任何“真相”。他们都是任务。 – dashiell

+0

因为它交换了两次。 –

回答

0

这只是交换,然后再次交换。

>>> a = 2 
>>> x = 1 
>>> a,x = x,a # We swapped them, so a = 1 and x = 2 now 
       # During evaluation, this statement will be equivalent to "a,x = 1,2" 
>>> a,x = x,a # And now we swap them again, so they're back to their original values 
       # During evaluation, this statement will be equivalent to "a,x = 2,1" 
>>> a 
2 
>>> x 
1 

看起来你缺少的是值的变化在中间。你不能在开始时使用xa,在你的例子中用4和5代替所有的事件,因为xa在操作过程中发生了变化。

+0

谢谢!我现在知道了。 – johnnewbie

0

发生这种情况是因为Python的所谓拆包作业_工作。实质上,解释器从赋值语句的左侧创建一个目标列表,并从赋值语句的右侧创建一个值列表,然后将值赋给目标。

所以在

a, b = 4, 5 

要分配4 a和5 b。然后

a, b = b, a 

分配5(的b的电流值),以a和4(的a的电流值),以b

重复上一条语句因此将值切换回原始变量。