我是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不等于以前的水平。有人可以解释为什么这是真的吗?
答案 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
你似乎缺少的是价值在中间变化。您无法在开头通过,并在示例中将所有x
和a
替换为4和5,因为x
和a
在中间发生了变化手术。
答案 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;
}
。
重复最后一个语句因此会将值切换回原始变量。