语法
(返回值 for 元素 in 可迭代对象 if 条件)
(expr for iter_var in iterable)
(expr for iter_var in iterable if cond_expr])
列表解析式的中括号换成小括号就行了
返回一个生成器,生成器也是一个对象,属于中间值
可迭代对象
可迭代对象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
其中序列有:list、tuple、string、bytes、bytearray
更复杂的筛选举例(多重条件判断可以放到for前面 的表达式中)
gen = (True if n%2==0 else False for n in range(100) if n % 3==0)
list(gen)
输出:
[True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False]
惰性测试(只是储存好了结构并未真实计算)
def add(a, b):
return a + b
def test():
for r in range(4):
yield r
g = test()
for n in [2, 10]:
g = (add(n, i) for i in g)
print(list(g))
输出:
[20, 21, 22, 23]
再来
w = 4
def add(a, b):
return a + b
def test():
for r in range(w):
yield r
g = test()
for n in [2, 10]:
g = (add(n, i) for i in g)
w = 6
print(list(g))
输出:
[20, 21, 22, 23, 24, 25]
再来(最难)
w = 4
def add(a, b):
return a + b
def test():
for r_i in range(w):
yield r_i
g = test()
print(list(g))#指针指到底了——>StopIteration
for n in [2, 10]:
g = (add(n, i) for i in g)
w = 6
print(list(g))
输出:
[0, 1, 2, 3]
[]