首页 > 代码库 > 生成器yield
生成器yield
生成器函数:函数体内包含yield关键字,该参数执行的结果是生成器函数。生成器本质也是迭代器。
yield
1.与return类似,都可以返回值,但不一样的是yield返回多次值,而return只能返回一次值。
2.为函数封装好__iter__ 和__next__方法,吧函数执行结果做成了迭代器。
3遵循迭代器的取值方式,next(),触发函数的执行,函数暂停与再继续的状态,都是由yield保存
三元表达式
res = True if 表达式 else False
x=2 y=1 res=‘%dzuida‘ %x if x>y else ‘yzuida‘ print(res)
列表解析式[i for i in range(100) if 表达式]
生成器表达式(i for i in range(100) if 表达式)
生成器优点:惰性计算,节省内存
生成器用途:模拟管道,惰性计算
面向过程编程:
import os def deco(func): def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper @deco def search_file(target): while True: path=yield g=os.walk(path)#g是生成器 for i in g: for file_name in i[-1]: file_path=r‘%s\%s‘ %(i[0],file_name) target.send(file_path) @deco def opener(target): while True: file_path=yield with open(file_path,encoding=‘utf-8‘) as f: target.send((file_path,f)) @deco def reader(target): while True: file_path,f=yield for line in f: res=target.send((file_path,line)) #grep.send((file_path,line)) if res: break @deco def grep(target,word): tag = False while True: file_path, line = yield tag tag = False if word in line: target.send(file_path) tag=True @deco def printer(): while True: file_path = yield print(file_path) g=search_file(opener(reader(grep(printer(),‘root‘)))) g.send(r‘E:\PYTHON学习\excises\day9‘)
生成器yield
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。