考虑以下功能;懒惰评估发电机
def myfunc():
a=b=c=0
x='12'
a,b,c=(i for i in x)
return a,b,c
该函数抛出以下异常:ValueError:需要多于2个值才能解包。 我的意图是将“x”变量中的可用值分配给给定顺序左侧的变量。因此a = 1,b = 2,c = 3,我想要做什么。
为了提高我对发电机的理解,我拆开功能
>>> dis.dis(myfunc)
2 0 LOAD_CONST 1 (0)
3 DUP_TOP
4 STORE_FAST 0 (a)
7 DUP_TOP
8 STORE_FAST 1 (b)
11 STORE_FAST 2 (c)
3 14 LOAD_CONST 2 ('12')
17 STORE_FAST 3 (x)
4 20 LOAD_CONST 3 (<code object <genexpr> at 0x297b430, file "<stdin>", line 4>)
23 MAKE_FUNCTION 0
26 LOAD_FAST 3 (x)
29 GET_ITER
30 CALL_FUNCTION 1
33 UNPACK_SEQUENCE 3
36 STORE_FAST 0 (a)
39 STORE_FAST 1 (b)
42 STORE_FAST 2 (c)
5 45 LOAD_FAST 0 (a)
48 LOAD_FAST 1 (b)
51 LOAD_FAST 2 (c)
54 BUILD_TUPLE 3
57 RETURN_VALUE
我猜是UNPACK_SEQUENCE被抛出异常。在UNPACK_SEQUENCE之前可以做STORE_FAST吗?希望我的问题有道理。
'x ='12''不是''123''并且不,右手边总是先评估 – jamylak 2013-05-08 10:31:56