Эти три выражения кажутся эквивалентными:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
Скомпилируются ли они с тем же кодом?
Какой из них более питонов?
Эти три выражения кажутся эквивалентными:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
Скомпилируются ли они с тем же кодом?
Какой из них более питонов?
Согласно 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, то это несколько доходит до мнения, но я бы предпочел либо первый, либо (в меньшей степени) второй вариант. Использование квадратных скобок является сбивающим с толку, потому что похоже, что вы создаете список (хотя, оказывается, это не так).