sds*_*sds 47 python destructuring
这三个表达式似乎是等价的:
a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
Run Code Online (Sandbox Code Playgroud)
他们编译成相同的代码吗?
哪一个更pythonic?
dan*_*ano 61
据说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
Run Code Online (Sandbox Code Playgroud)
所以他们都应该具有相同的效率.至于哪个是大多数Pythonic,它有点落后于观点,但我赞成第一个或(在较小程度上)第二个选项.使用方括号是令人困惑的,因为它看起来像你正在创建一个列表(虽然事实证明你不是).
| 归档时间: |
|
| 查看次数: |
24858 次 |
| 最近记录: |