这三个表达似乎是等价的:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
它们编译成相同的代码吗?
哪一个更符合Pythonic风格?
这三个表达似乎是等价的:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
它们编译成相同的代码吗?
哪一个更符合Pythonic风格?
据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风格,这在一定程度上取决于个人观点,但我会更倾向于第一个选项或者(稍微)第二个选项。使用方括号很容易让人困惑,因为看起来像是在创建列表(尽管事实并非如此)。
[[a]] = b
进行某种分组,例如((a,),) = b
也不是特别好看。至于哪个更易读,当这不是必要的时候,就由你决定了。 - Ry-