在assignemnt中交换值

时间:2016-08-02 16:56:51

标签: python computer-science

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

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

为什么这是真的?

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

例如,如果我有:

a,x = 4,5

然后 a = 4且x = 5

第二部分:

a,x = 5, 4

然后a = 5且x = 4 所以x不等于以前的水平。有人可以解释为什么这是真的吗?

2 个答案:

答案 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在中间发生了变化手术。

答案 1 :(得分:0)

这是因为Python所谓的解包赋值工作方式。本质上,解释器从左侧创建目的地列表,从赋值语句的右侧创建值列表,然后将值分配给目的地。

所以在

a, b = 4, 5

您要将{4}分配给a,将5分配给b。然后

a, b = b, a

b的当前值(a)分配给a,将4(b的当前值)分配给 void * OPAQUE; typedef struct head Head; typedef struct data Data; struct head { int size; int capacity; Data *info; }; struct data { int key; int values; }

重复最后一个语句因此会将值切换回原始变量。