标签:返回值 art 迭代 file_path open python生成器 format none orm
只要在函数体内存出现yield关键字,那么再执行函数就不会执行函数体代码,会得到一个结果,该结果就是生成器。
def func(): print("====>1") yield 1 print("====>2") yield 2 print("====>3") yield 3 #生成器就是迭代器 g=func() # g.__iter__() # g.__next__() res=next(g) print(res) #执行结果 ====>1 1
#1、yield为我们提供了一种自定义迭代器的方法 #2、yield与return的区别: #1、yield可以放回多次值 #2、函数暂停与再继续的状态是由yield帮我们保存的
#代码 def my_range(start,end,step=1): while start < end: try: yield start start+=step except StopIteration: break res=my_range(1,10) for i in res: print(i)
import time def tail(file_path): with open(file_path,"rb") as f: f.seek(0,2) while True: line=f.readline() if line: # print(line.decode("utf-8"),end="") yield line else: time.sleep(0.05) def grep(lines,pattern): for line in lines: line=line.decode("utf-8") if pattern in line: print(line,end="") lines=tail("file.txt") grep(lines,"404")
示例一:表达式形式
def eater(name): print("{} ready eat".format(name)) while True: food=yield print("{} start eat {}".format(name,food)) e=eater("alex") #首先要初始化一下 next(e) #第一次到yield暂停,这里也可以写成print(e.send(None)) #然后e.send()传值:1、从暂停的位置将值传给yiled,2、与next一样 e.send("apple") e.send("鱼香肉丝") //执行结果 alex ready eat alex start eat apple alex start eat 鱼香肉丝
示例二:表达式形式+返回值形式
def eater(name): print("{} ready eat".format(name)) eat_list=[] while True: food=yield eat_list #先将send传的值给yield,再由yield传给food,当暂停的时候将eat_list返回 eat_list.append(food) print("{} start eat {}".format(name,food)) e=eater("alex") #首先要初始化一下 next(e) #第一次到yield暂停,这里也可以写成print(e.send(None)) #然后e.send()传值:1、从暂停的位置将值传给yiled,2、与next一样 print(e.send("apple")) print(e.send("鱼香肉丝")) //执行结果 alex ready eat alex start eat apple [‘apple‘] alex start eat 鱼香肉丝 [‘apple‘, ‘鱼香肉丝‘]
标签:返回值 art 迭代 file_path open python生成器 format none orm
原文地址:https://www.cnblogs.com/baicai37/p/12559364.html