我最近看着需要创建的三个空单时,到位的[]
,{}
和()
使用list()
,dict()
,tuple()
,分别。理由是它看起来更具可读性。我打算征求对这种风格的意见,但后来我决定测试性能。我这样做:为什么list(),dict()和tuple()比[],{}和()慢?
>>> from timeit import Timer
>>> Timer('for x in range(5): y = []').timeit()
0.59327821802969538
>>> from timeit import Timer
>>> Timer('for x in range(5): y = list()').timeit()
1.2198944904251618
我试过dict()
,tuple()
和list()
和每个函数调用的版本是令人难以置信的比语法版本({}
[]
,()
)那么差,我有3个问题:
- 为什么函数调用更昂贵?
- 为什么这么差?
- 为什么在我的计时器中创建5个空列表需要1.2秒?我知道
timeit
关闭了垃圾回收功能,但是在考虑我仅使用range(5)
时,这可能不会起作用。
回复:风格意见 - 我经常使用[]。我认为这很清楚。性能问题虽然很有趣。 – nmichaels 2010-11-22 02:32:00
有很多东西看起来很奇怪,直到你习惯了它们。因为list()实际上可能不是'__builtins __。list',所以我会一直比较喜欢'[]'到'list()'。买家要当心。 – SingleNegationElimination 2010-11-22 02:39:12