Python中的生成器

说到生成器,我先讲一个迭代器的概念。迭代器就是可迭代对象,可迭代对象是实现了next方法并且在没有元素的时候抛出StopIteration异常的对象。跌代器主要用在for in语句里面,用于厉遍对象的子元素。例如,文件对象就是一个可迭代对象。我们可以这么操作:

With open("c:\aaa.txt") as f:
    for line in f:
        print(line)

用上面的代码就可以实现读取文件的每一行,之所以f能够运用在for in里面,就因为它是可迭代的。

接着说生成器,生成器是指可以产生可迭代数据的对象,包括生成器函数和生成器表达式。像下面的一个表达式就是生成器表达式:

genexp = ( line for line in f )

把上面的小括号换成中括号就成了列表表达式。
生成器表达式的优点是一次生成一个元素,占用内存小。列表表达式一次返回全部元素,占用内存比较多。

生成器函数主要是用yield语句实现的,举个列子:

def genfun():
    yield 1
    yield 2

上面的生成器函数可以通过下面的方式调用:

a = genfun()
a.__next__()  //返回1
a.__next__()  //返回2
a.__next__()  //抛出stopiteration异常

也可以用如下的方式调用:

a = genfun()
#下面语句输出所以元素
for i in a:
    print(i)   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值