<s> def fab ( max ) : <EOL> n , a , b = <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> <EOL> while n < max : <EOL> print b <EOL> a , b = b , a + b <EOL> n = n + <NUM_LIT:1> <EOL> def fab1 ( max ) : <EOL> n , a , b = <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> <EOL> L = [ ] <EOL> while n < max : <EOL> L . append ( b ) <EOL> a , b = b , a + b <EOL> n = n + <NUM_LIT:1> <EOL> return L <EOL> class Fab ( object ) : <EOL> def __init__ ( self , max ) : <EOL> self . max = max <EOL> self . n , self . a , self . b = <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> <EOL> def __iter__ ( self ) : <EOL> return self <EOL> def next ( self ) : <EOL> if self . n < self . max : <EOL> r = self . b <EOL> self . a , self . b = self . b , self . a + self . b <EOL> self . n = self . n + <NUM_LIT:1> <EOL> return r <EOL> raise StopIteration ( ) <EOL> for n in Fab ( <NUM_LIT:5> ) : <EOL> print n <EOL> def fab2 ( max ) : <EOL> n , a , b = <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> <EOL> while n < max : <EOL> yield b <EOL> a , b = b , a + b <EOL> n = n + <NUM_LIT:1> <EOL> f = fab2 ( <NUM_LIT:5> ) <EOL> f . next ( ) <EOL> from inspect import isgeneratorfunction <EOL> print ( isgeneratorfunction ( fab2 ) ) <EOL> import types <EOL> print ( isinstance ( fab2 , types . GeneratorType ) ) <EOL> print ( isinstance ( fab2 ( <NUM_LIT:5> ) , types . GeneratorType ) ) <EOL> from collections import Iterable <EOL> print ( isinstance ( fab2 , Iterable ) ) <EOL> print ( isinstance ( fab2 ( <NUM_LIT:5> ) , Iterable ) ) <EOL> def read_file ( fpath ) : <EOL> BLOCK_SIZE = <NUM_LIT> <EOL> with open ( fpath , '<STR_LIT:rb>' ) as f : <EOL> while True : <EOL> block = f . read ( BLOCK_SIZE ) <EOL> if block : <EOL> yield block <EOL> else : <EOL> return </s>
