在Python中,是"和"语句还是全部()更快?

Joe*_*lip 2 python

在测试多个条件是否为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)

  • 那是ipython的捷径. (2认同)

Ble*_*der 5

第二个评估了所有的条件,使那些布尔值到一个列表,然后检查,看看他们都是真实的.

另一方面,第一个只是逐个检查它们并在第一个错误条件下停止(如果有的话).正如帕维尔的回答所示,第一个肯定更快.

你也可以使用一个发生器,它可以让你all发生短路:

all(str.isdigit(s) for s in your_strings)
Run Code Online (Sandbox Code Playgroud)