分配
a,b = c,a
Run Code Online (Sandbox Code Playgroud)
同样的
b,a = a,c
Run Code Online (Sandbox Code Playgroud)
这似乎是很简单情况相同a,b以及c是数字.
有没有这种情况失败?
不,没有失败的情况.这两种说法是完全等价的,因为a和b是独立的.
这是因为右边的值在堆栈上把第一分配发生之前的地方(从左至右).分配给a之前b没有区别,因为a并且b是完全不同的名称,并且首先分配给任何一个不会影响另一个.
所以第一个声明:
a,b = c,a
Run Code Online (Sandbox Code Playgroud)
执行为(伪字节码*)
PUSH C ON STACK
PUSH A ON STACK
SWAP TOP TWO VALUES OF STACK
POP TOP OF STACK, STORE IN A
POP TOP OF STACK, STORE IN B
Run Code Online (Sandbox Code Playgroud)
而第二个
b,a = a,c
Run Code Online (Sandbox Code Playgroud)
被执行为
PUSH A ON STACK
PUSH C ON STACK
SWAP TOP TWO VALUES OF STACK
POP TOP OF STACK, STORE IN B
POP TOP OF STACK, STORE IN A
Run Code Online (Sandbox Code Playgroud)
不要紧,什么类型的参考值a,b或者c是.
如果您要进行分配和/或混合订阅,事情会变得更加混乱.在所有这些情况下,分配给的名称不是独立的,人们通常不会意识到所有赋值都是在执行右侧表达式之后发生的,并且在此之后从左到右进行赋值.
*请参阅如何在python元组(a,b)=(b,a)内部交换成员?对于实际的字节码示例.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |