Is any() evaluated lazily?
<p>I am writing a script in which i have to test numbers against a number of conditions. If <strong>any</strong> of the conditions are met i want to return <code>True</code> and i want to do that the fastest way possible.</p>

<p>My first idea was to use <code>any()</code> instead of nested <code>if</code> statements or multiple <code>or</code> linking my conditions. Since i would be satisfied if any of the conditions were <code>True</code> i could really benefit from <code>any()</code> being lazy and returning True as soon as it could.</p>

<p>Based on the fact that the following print happens instantly and not after 10 (= 0 + 1 + 2 + 3 + 4) seconds i assume it is. Is that the case or am i somehow mistaken?</p>

<pre><code>import time

def some(sec):
    time.sleep(sec)
    return True

print(any(some(x) for x in range(5)))
</code></pre>

<p>Yes, <code>any()</code> and <code>all()</code> short-circuit, aborting as soon as the outcome is clear: See the <a href="https://docs.python.org/3/library/functions.html#all">docs</a>:</p>

<blockquote>
  <p><strong>all(iterable)</strong></p>
  
  <p>Return True if all elements of the iterable are true (or if the
  iterable is empty). Equivalent to:</p>

<pre><code>def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
</code></pre>
  
  <p><strong>any(iterable)</strong></p>
  
  <p>Return True if any element of the iterable is true. If the iterable is
  empty, return False. Equivalent to:</p>

<pre><code>def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
</code></pre>
</blockquote>

python