考慮以下功能;懶惰評估發電機
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