1# mode: run 2# tag: generators, lambda 3 4def genexpr(): 5 """ 6 >>> genexpr() 7 [0, 2, 4, 6, 8] 8 """ 9 x = 'abc' 10 result = list( x*2 for x in range(5) ) 11 assert x == 'abc' # don't leak 12 return result 13 14def genexpr_if(): 15 """ 16 >>> genexpr_if() 17 [0, 4, 8] 18 """ 19 x = 'abc' 20 result = list( x*2 for x in range(5) if x % 2 == 0 ) 21 assert x == 'abc' # don't leak 22 return result 23 24def genexpr_if_false(): 25 """ 26 >>> genexpr_if_false() 27 [] 28 """ 29 x = 'abc' 30 result = list( x*2 for x in range(5) if False ) 31 assert x == 'abc' # don't leak 32 return result 33 34def genexpr_with_lambda(): 35 """ 36 >>> genexpr_with_lambda() 37 [0, 4, 8] 38 """ 39 x = 'abc' 40 result = list( x*2 for x in range(5) if (lambda x:x % 2)(x) == 0 ) 41 assert x == 'abc' # don't leak 42 return result 43 44def genexpr_of_lambdas(int N): 45 """ 46 >>> [ (f(), g()) for f,g in genexpr_of_lambdas(5) ] 47 [(0, 0), (1, 2), (2, 4), (3, 6), (4, 8)] 48 """ 49 return ( ((lambda : x), (lambda : x*2)) for x in range(N) ) 50 51 52def genexpr_with_bool_binop(values): 53 """ 54 >>> values = [(1, 2, 3), (None, 4, None), (5, None, 6)] 55 >>> genexpr_with_bool_binop(values) 56 [(1, 2, 3), ('X', 4, 'X'), (5, 'X', 6)] 57 """ 58 # copied from CPython's test_itertools.py 59 return [tuple((e is None and 'X' or e) for e in t) for t in values] 60