【发布时间】:2023-01-12 03:04:26
【问题描述】:
我想知道这两种表示法之间是否有任何区别(性能、速度……):
new_list = []和 new_list = list()
?
或者它是开发人员/团队的偏好,甚至是对语言的推荐? 集合和字典呢?
【问题讨论】:
标签: python python-3.x list dictionary set
我想知道这两种表示法之间是否有任何区别(性能、速度……):
new_list = []和 new_list = list()
?
或者它是开发人员/团队的偏好,甚至是对语言的推荐? 集合和字典呢?
【问题讨论】:
标签: python python-3.x list dictionary set
有一些差异,例如:
list(('x','y'))
#['x', 'y']
[('x','y')]
#[('x', 'y')]
list(set('x'))
#['x']
[set('x')]
#[{'x'}]
list() 是一个函数调用,而 [] 是一个文字。
此外,还有一个名为 dis dis doc 的模块:
dis模块支持对CPython字节码进行反汇编分析。该模块作为输入的 CPython 字节码在文件 Include/opcode.h 中定义,并由编译器和解释器使用。
要显示 lambda: list() 和 lambda: [] 的反汇编,请参见以下内容:
import dis
print(dis.dis(lambda: list()))
#output
1 0 LOAD_GLOBAL 0 (list)
2 CALL_FUNCTION 0
4 RETURN_VALUE
print(dis.dis(lambda: []))
#output
1 0 BUILD_LIST 0
2 RETURN_VALUE
此外,list 是一个全局名称,可以在运行时被覆盖,因此它是强烈建议不要使用 list 作为您的变量名.
因为您不想覆盖内置的list。
【讨论】:
dis 模块在提供的示例中正在做什么以及如何解释字节码来改进(体面的)答案。