Python Example 生成器 yield

生成器 yield

函数使用 yield 后,就像在yidle处打了断点一样,然后将函数挂起,等待下一次触发执行.

表达式

先看一个生成器表达式

# 对i进行平方,生成一个可迭代的对象
>>> res = (i**2 for i in range(7))
# 这个可迭代对象, 可以转为 列表
>>> returnToList = list(res)
# 可以逐一输出这个对象中的值
>>> res.__next__()
>>> res.__next__()
>>> res.__next__()
>>> res.__next__()
# 还可以使用for进行遍历
>>> for k in res:
		print (k)

yield 使用在函数内部, 生成一个可迭代的对象,调用一次__next__(),输出一次值

>>> def yFun(n):
		for i in range(n):
			yield i
>>> res = yFun(5)
>>> res.__next__()
>>>> res.__next__()

递归

aList = ["cat","dog",["cow","duck"],"snake",[["horse","monkey","chicken",["pig","mouse"]]]]
def yRecursion(aList):
	try:
		try: aList+" "
		except TypeError: pass
		else: raise TypeError
		for i in aList:
			for j in yRecuesion(i):
				yield j
	except TypeError :
		yeild aList

文件读取

如果直接对文件对象调用 read() 方法,会导致不可预测的内存占用。好的方法是利用固定长度的缓冲区来不断读取文件内容。通过 yield,我们不再需要编写读文件的迭代类,就可以轻松实现文件读取:

def read_file(fpath): 
    BLOCK_SIZE = 1024 
    with open(fpath, 'rb') as f: 
        while True: 
            block = f.read(BLOCK_SIZE) 
            if block: 
                yield block 
            else: 
                return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值