我正在努力为计算机科学的未来做准备,所以我从ECMAScript入手,现在我正在努力学习更多有关Python的知识。来自ECMAScript,看到a, b, c = 1, 2, 3
之类的多个任务让我感到困惑,直到我意识到有多个任务正在进行。为了让事情更清楚一点,我真的很想做(a, b, c) = (1, 2, 3)
,但我不确定这是否会成为可衡量的性能影响。根据我的理解,元组本质上是多个任务无论如何都有效,但世界上有很多奇怪的东西,所以我尽量不去做任何事情。
提前致谢
答案 0 :(得分:13)
使用dis
模块检查非常简单:
>>> import dis
>>> dis.dis(compile('a,b,c=1,2,3','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>> dis.dis(compile('(a,b,c)=(1,2,3)','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>>
请参阅?那些完全冗余的括号与生成和执行的字节码完全相同 no - 就像说a+b
和(a+b)
将生成和执行完全相同的字节码其他。所以,如果你想添加多余的括号,那就把自己搞得一团糟 - 阅读代码的人可能不喜欢它们,但是那些只是执行它的人永远都不会注意到。只是,为什么只停留两对冗余括号?参见
>>> dis.dis(compile('(((a,b,c)))=(((1,2,3)))','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>>
六对冗余括号(或任何数字,真的)仍然产生完全相同的代码。一旦你留下明显的最小数量的冗余括号(根本没有:它们是多余的,毕竟;-),正好哪里你会停止吗? - )为什么那里,什么时候它是“免费的”再添加一对...或两个......或三个......? - )
答案 1 :(得分:11)
它不应该对性能产生任何影响。括号不会使它成为元组,逗号就是这样。所以(1,2,3)与1,2,3
完全相同答案 2 :(得分:2)
它也适用于列表:
a, b, c = [1, 2, 3]
同样适用
答案 3 :(得分:1)
据我所知,多重赋值是作为元组打包和元组解包的组合实现的,所以它应该具有相同的效果。