在测试多个条件是否为True时,是and语句还是all()更快?例如:
if '1234'.isdigit() and '4567'.isdigit() and '7890'.isdigit():
print "All are digits!"
Run Code Online (Sandbox Code Playgroud)
要么
if all(['1234'.isdigit(), '4567'.isdigit(), '7890'.isdigit()]):
print "All are digits!"
Run Code Online (Sandbox Code Playgroud)
谢谢!
Pav*_*sov 11
ands更快,没有列表创建,也没有函数调用.
In [10]: %timeit '1234'.isdigit() and '4567'.isdigit() and '7890'.isdigit()
1000000 loops, best of 3: 186 ns per loop
In [11]: %timeit all(['1234'.isdigit(), '4567'.isdigit(), '7890'.isdigit()])
1000000 loops, best of 3: 323 ns per loop
Run Code Online (Sandbox Code Playgroud)
ands甚至不会不必要地评估事情:
In [1]: def x():
...: print 'call'
...: return False
...:
In [2]: x() and x()
call
Out[2]: False
In [3]: all([x(), x()])
call
call
Out[3]: False
Run Code Online (Sandbox Code Playgroud)
第二个评估了所有的条件,使那些布尔值到一个列表,然后检查,看看他们都是真实的.
另一方面,第一个只是逐个检查它们并在第一个错误条件下停止(如果有的话).正如帕维尔的回答所示,第一个肯定更快.
你也可以使用一个发生器,它可以让你all发生短路:
all(str.isdigit(s) for s in your_strings)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |