다음 기능을 고려하십시오.생성기에서의 게으른 평가
def myfunc():
a=b=c=0
x='12'
a,b,c=(i for i in x)
return a,b,c
이 함수는 다음을 예외로 throw합니다. ValueError : 압축을 풀려면 2 개 이상의 값이 필요합니다. 여기서 'x'변수에 사용 가능한 값을 왼쪽에있는 변수에 지정된 순서로 할당하려고합니다. 따라서 a = 1, b = 2, c = 3, 내가 무엇을하고 싶은지.
발전기에 대한 나의 이해를 개선하기 위해, 나는 내가 뭘 생각하는 UNPACK_SEQUENCE 예외를 던지고있는 기능을
>>> 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 전에 STORE_FAST 할 수 있습니까? 내 질문이 합리적이 되길 바랍니다.
'x = '12 '' 아니요'123'' 아니요, 아니요, 오른쪽은 항상 먼저 평가됩니다 – jamylak