рассмотрите следующие функции;ленивая оценка в генераторе
def myfunc():
a=b=c=0
x='12'
a,b,c=(i for i in x)
return a,b,c
Эта функция генерирует исключение из следующего: ValueError: для распаковки требуется более двух значений. Мое намерение здесь состоит в том, чтобы присвоить доступные значения в переменной «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 бросает исключение. Возможно ли сделать STORE_FAST до UNPACK_SEQUENCE? Надеюсь, что мой вопрос имеет смысл.
'x = '12'' не'' 123'' и нет, правая сторона всегда оценивается в первую очередь – jamylak