在一个编码示例中,我看到了以下代码片段,如果列表为空,则返回True,否则返回False。
return a == []
Run Code Online (Sandbox Code Playgroud)
这样做的原因是避免写作
if a:
return False
else:
return True
Run Code Online (Sandbox Code Playgroud)
在一个包含成千上万个条目的真实示例中,我应该注意任何速度差异吗?
否。在两种情况下都没有速度差异。由于在这两种情况下,都length首先检查列表的。在第一种情况下,所述len的a与所述比较len的[]之前的任何进一步的比较。多数情况下,len应该有所不同,因此测试会立即返回。
但是,更pythonic的方式是return not a使用或将其转换bool然后返回:
return not a
# or
return not bool(a)
Run Code Online (Sandbox Code Playgroud)
如果您问如果放入函数(因此是return's),哪种方法会更快,那么我使用该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))
Run Code Online (Sandbox Code Playgroud)
我运行该程序五次,每次记录每个函数的速度。在获得每次的平均值后,我得出以下结论:
method one speed(milliseconds): 0.2571859563796641
----------------------------- ------------------
method two speed(milliseconds): 0.2679253742685615
Run Code Online (Sandbox Code Playgroud)
至少从我上面的测试来看,您在问题中描述的第一种方法比第二种方法稍快。当然,上面的这些数字可能会根据这两个函数内部的具体内容而发生巨大变化。
不过,我同意 Cdarke 在评论中所说的内容。选择最清晰、最简洁的一种。不要仅仅根据其速度来选择一种选项。用 Guido van Rosom 的话说:可读性很重要。