Pythonのany()
関数は、イテラブル(リストやタプルなど)の要素が一つでも真であればTrue
を返し、全て偽であればFalse
を返す関数です。この関数は「短絡評価」または「遅延評価」(Lazy Evaluation)と呼ばれる特性を持っています。
any()とLazy Evaluation
any()
関数は、イテラブルの要素を左から順に評価し、真である要素が見つかった時点で評価を停止し、True
を返します。これは、全ての要素を評価する必要がないため、計算時間を節約できる利点があります。
以下に、any()
関数のLazy Evaluationの例を示します。
import time
def some(sec):
time.sleep(sec)
return True
print(any(some(x) for x in range(5))) # True
このコードでは、range(5)
で生成される0から4までの各数値x
に対して、some(x)
関数を適用しています。some(x)
関数は、x
秒間スリープした後にTrue
を返します。any()
関数は、some(x)
がTrue
を返す(つまり、x=0
のとき)とすぐに評価を停止し、True
を返します。そのため、このコードはほぼ瞬時にTrue
を出力します。
注意点
しかし、any()
関数のLazy Evaluationは、イテラブルがジェネレータである場合にのみ適用されます。リスト内包表記などでリストを生成した場合、リストの全ての要素が先に評価されるため、Lazy Evaluationの恩恵を受けることができません。
以上、Pythonのany()
関数とLazy Evaluationについて解説しました。この特性を理解することで、より効率的なコードを書くことができます。