1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
# mode: run
# tag: genexpr
# cython: language_level=3
"""
Adapted from CPython's test_grammar.py
"""
def genexpr_simple():
"""
>>> sum([ x**2 for x in range(10) ])
285
>>> sum(genexpr_simple())
285
"""
return (x**2 for x in range(10))
def genexpr_conditional():
"""
>>> sum([ x*x for x in range(10) if x%2 ])
165
>>> sum(genexpr_conditional())
165
"""
return (x*x for x in range(10) if x%2)
def genexpr_nested2():
"""
>>> sum([x for x in range(10)])
45
>>> sum(genexpr_nested2())
45
"""
return (x for x in (y for y in range(10)))
def genexpr_nested3():
"""
>>> sum([x for x in range(10)])
45
>>> sum(genexpr_nested3())
45
"""
return (x for x in (y for y in (z for z in range(10))))
def genexpr_nested_listcomp():
"""
>>> sum([x for x in range(10)])
45
>>> sum(genexpr_nested_listcomp())
45
"""
return (x for x in [y for y in (z for z in range(10))])
def genexpr_nested_conditional():
"""
>>> sum([ x for x in [y for y in [z for z in range(10) if True]] if True ])
45
>>> sum(genexpr_nested_conditional())
45
"""
return (x for x in (y for y in (z for z in range(10) if True)) if True)
def genexpr_nested2_conditional_empty():
"""
>>> sum(genexpr_nested2_conditional_empty())
0
"""
return (y for y in (z for z in range(10) if True) if False)
def genexpr_nested3_conditional_empty():
"""
>>> sum(genexpr_nested3_conditional_empty())
0
"""
return (x for x in (y for y in (z for z in range(10) if True) if False) if True)
|