在一个编码示例中,我看到以下代码段,如果列表为空则返回 True , False
return a == []
原因是为了避免写作
if a:
return False
else:
return True
在一个有数千个条目的真实例子中,我应该注意哪些速度差异?
答案 0 :(得分:4)
没有。两种情况都没有速度差异。因为在这两种情况下都会先检查列表的length
。
在第一种情况下,在进行任何进一步比较之前,len
a
与len
的{{1}}进行比较。大多数时候[]
应该不同,所以测试只是立即返回。
但更加pythonic的方式是len
或使用return not a
转换它然后返回它:
bool
答案 1 :(得分:2)
如果你问一个函数放入哪个方法会更快(因此return
),那么我使用timeit
模块进行一些测试。我将每个方法放在一个函数中,然后运行程序以查看哪个函数运行得更快。这是程序:
import timeit
def is_empty2():
a = []
if a:
return True
else:
return False
def is_empty1():
a = []
return a == []
print("Time for method 2:")
print(timeit.timeit(is_empty2))
print("")
print("Time for method 1:")
print(timeit.timeit(is_empty1))
我运行程序五次,每次记录每个功能的速度。在得到每次的平均值后,这就是我想出的:
method one speed(milliseconds): 0.2571859563796641
----------------------------- ------------------
method two speed(milliseconds): 0.2679253742685615
至少从我上面的测试中,您在问题中描述的第一种方法稍微比第二种方法快。当然,上述数字可能会根据这两个函数的确切内容而发生巨大变化。
然而,我同意卡尔克在评论中所说的话。选择最清晰简洁的一个。不要仅根据速度选择一种选择。用Guido van Rosom的话说:可读性计算。