Подтвердить что ты не робот

Уничтожение назначения Python

Эти три выражения кажутся эквивалентными:

a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()

Скомпилируются ли они с тем же кодом?

Какой из них более питонов?

4b9b3361

Ответ 1

Согласно dis, все они скомпилируются в один и тот же байт-код:

>>> def f1(line):
...  a,b,c = line.split()
... 
>>> def f2(line):
...  (a,b,c) = line.split()
... 
>>> def f3(line):
...  [a,b,c] = line.split()
... 
>>> import dis
>>> dis.dis(f1)
  2           0 LOAD_FAST                0 (line)
              3 LOAD_ATTR                0 (split)
              6 CALL_FUNCTION            0
              9 UNPACK_SEQUENCE          3
             12 STORE_FAST               1 (a)
             15 STORE_FAST               2 (b)
             18 STORE_FAST               3 (c)
             21 LOAD_CONST               0 (None)
             24 RETURN_VALUE        
>>> dis.dis(f2)
  2           0 LOAD_FAST                0 (line)
              3 LOAD_ATTR                0 (split)
              6 CALL_FUNCTION            0
              9 UNPACK_SEQUENCE          3
             12 STORE_FAST               1 (a)
             15 STORE_FAST               2 (b)
             18 STORE_FAST               3 (c)
             21 LOAD_CONST               0 (None)
             24 RETURN_VALUE        
>>> dis.dis(f3)
  2           0 LOAD_FAST                0 (line)
              3 LOAD_ATTR                0 (split)
              6 CALL_FUNCTION            0
              9 UNPACK_SEQUENCE          3
             12 STORE_FAST               1 (a)
             15 STORE_FAST               2 (b)
             18 STORE_FAST               3 (c)
             21 LOAD_CONST               0 (None)
             24 RETURN_VALUE        

Таким образом, все они должны иметь такую ​​же эффективность. Что касается большинства Pythonic, то это несколько доходит до мнения, но я бы предпочел либо первый, либо (в меньшей степени) второй вариант. Использование квадратных скобок является сбивающим с толку, потому что похоже, что вы создаете список (хотя, оказывается, это не так).