考虑以下功能;
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?希望我的问题是有道理的。