python 生成器generator和迭代器Iterator

迭代 Iteration
使用for循环来遍历list或者tuple,这种遍历就是迭代,遍历的list或者tuple称为可迭代对象Iterable

列表生成式
列表中,直接写表达式,生成相对应的列表

>>> [ x + 1 for x in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成器 Generator
python中,一边循环一边计算的机制,就叫生成器,创建生成器generator的方法:将列表生成式中括号改用括号即可。生成器会每次输出一个,可以调用next(obj)来输出

>>> a =( x + 1 for x in range(10))
>>> next(a)
1

迭代器 Iterator
可以用next(obj)来调用,并不断返回下一个值的对象,都是迭代器:Iterator
迭代器是一个数据流,可以调用并返回下一次的值,直到没有值时,抛出StopIteration异常。可以提高性能,节省内存空间。
还有一种使用yield来产生迭代器的方式,简单的方式,就是在for循环中,可以用到print打印输出的地方,换成yield就变成了迭代器。

特点:

  • next(Iterator)来调用
  • 每次调用后,返回下一次的值
  • 两种创建方式: 列表生成式中括号改括号;使用yield(相当于替代print打印输出)创建的函数
  • 因为是一边循环,一边推断后边的值,所以能很大的提高性能,而不会因为数据量大,占用大量的内存空间。

总结

  • 凡是可以用for循环来遍历的,都是可迭代的,主要是一些集合,包括list, tuple, dict, str等
  • 凡是可以作用于next()函数的对象都是迭代器Iterator,比如生成器generator (列表生成式的中括号改成括号即可),还有使用yield的函数也是迭代器,每次需要用next(obj)来返回值。
  • list、tuple等集合类型是iterable, 但不是Iterator。但可以用iter(list)将可迭代对象转换成迭代器。
  • python的for循环,本质上就是不断的调用next()来实现遍历的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值