2008-12-20 32 views

Trả lời

31

Việc xây dựng trong chức năng any làm những gì bạn muốn:

>>> any([True, True, False]) 
True 
>>> any([False, False, False]) 
False 
>>> any([False, False, True]) 
True 

any có lợi thế hơn reduce của shortcutting các thử nghiệm cho các hạng mục sau trong chuỗi khi nó tìm thấy một giá trị đích thực. Điều này có thể rất tiện dụng nếu trình tự là một máy phát điện với một hoạt động đắt tiền đằng sau nó. Ví dụ:

>>> def iam(result): 
... # Pretend this is expensive. 
... print "iam(%r)" % result 
... return result 
... 
>>> any((iam(x) for x in [False, True, False])) 
iam(False) 
iam(True) 
True 
>>> reduce(lambda x,y: x or y, (iam(x) for x in [False, True, False])) 
iam(False) 
iam(True) 
iam(False) 
True 

Nếu phiên bản của Python của bạn không có any(), all() builtins sau đó họ có thể dễ dàng thực hiện như Guido van Rossum suggested:

def any(S): 
    for x in S: 
     if x: 
      return True 
    return False 

def all(S): 
    for x in S: 
     if not x: 
      return False 
    return True 
2

Bạn có thể làm điều này:

reduce(lambda a,b: a or b, [True, True, False]) 
1

giảm nên làm điều đó cho bạn, không nên nó ?

>>> def _or(x, y): 
...  return x or y 
... 
>>> reduce(_or, [True, True, False]) 
True 
3
>>> all([True,False,True]) 
False 
>>> any([True,False,True]) 
True 

Python 2.5 và lên (documentation)

7

Không ai đề cập đến nó, nhưng "or" có sẵn dưới dạng hàm trong mô-đun nhà điều hành:

from operator import or_ 

Sau đó, bạn có thể sử dụng reduce như trên.

Luôn khuyên "any" mặc dù trong Pythons gần đây hơn.

Các vấn đề liên quan