本文共 1264 字,大约阅读时间需要 4 分钟。
很多东西写过之后才知道自己什么都不懂。。。多变量赋值,写起来很方便,但是结果却出乎意料
t=1t,a=2,t+1本来我预料a的值是2+1也就是3,结果却是2。。。
开始以为多变量赋值还是执行多个赋值语句,看来不是这样,
然后我猜想多变量赋值等号右边是从右向左执行,测试一下:
def t1(): print 1def t2(): print 2def t3(): print 3a,b,c = t1(),t2(),t3()
结果输出
1
2
3
证明是从左向右执行的(我怎么会有这么奇怪的想法,难道是受赋值语句从右向左执行的影响?)
现在看来,应该是先从左到右计算出右边的结果然后依次赋值给左边变量(我擦,这不是正常的做法么!!)。
import disdef foo(): t=1 t,a=3,t+1 dis.dis(foo)输出的如下
21 0 LOAD_CONST 1 (1) 2 STORE_FAST 0 (t) 22 4 LOAD_CONST 2 (3) 6 LOAD_FAST 0 (t) 8 LOAD_CONST 1 (1) 10 BINARY_ADD 12 ROT_TWO 14 STORE_FAST 0 (t) 16 STORE_FAST 1 (a) 18 LOAD_CONST 0 (None) 20 RETURN_VALUE
# 第一步入栈vm_stack = [..., 3, t+1] = [..., 3, 2]# 第二步翻转vm_stack = [..., 2, 3]# 第三步赋值t = vm_stack.pop() = 3a = vm_stack.pop() = 2广告:我自己业余时间也实现了一个Python虚拟机玩具,有兴趣可以了解下,欢迎加入或者提出建议
转载地址:http://btuws.baihongyu.com/