概述
语法
(返回值 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]
[]
最后
以上就是无奈微笑为你收集整理的Python 生成器 表达式 两个有难度的例子让你彻底明白!!语法的全部内容,希望文章能够帮你解决Python 生成器 表达式 两个有难度的例子让你彻底明白!!语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复