title: Calling any() on a generator with print() inside it produces unexpected behaviour
body: <p><code>any</code> is supposed to short-circuit once it finds a single truthy value in any iterable (whether that's an iterator, generator, list, etc.)</p>
  
  <p>For normal generators, this is true:</p>
  
  <pre><code>Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32  
  Type "help", "copyright", "credits" or "license" for more information.
  &gt;&gt;&gt; gen = (i for i in range(100))
  &gt;&gt;&gt; gen
  &lt;generator object &lt;genexpr&gt; at 0x0341A360&gt;
  &gt;&gt;&gt; next(gen)
  0                         
  &gt;&gt;&gt; next(gen)
  1   
  &gt;&gt;&gt; any(gen)
  True                                                                                       
  &gt;&gt;&gt; next(gen)
  3                                      
  &gt;&gt;&gt;
  </code></pre>
  
  <p>If you create a generate that includes <code>print</code> in it, <code>any</code> DOES NOT short-circuit:</p>
  
  <pre><code>&gt;&gt;&gt; gen = (print(i) for i in range(100))
  &gt;&gt;&gt; next(gen)
  0
  &gt;&gt;&gt; next(gen)
  1
  &gt;&gt;&gt; any(gen)
  2
  3
  4
  5
  6
  7
  8
  9
  ...
  </code></pre>
  
  <p>Why does adding <code>print</code> prevent <code>any</code> from short-circuiting?                                                                    </p>