Python可迭代对象,迭代器,生成器

Python可迭代对象,迭代器,生成器

Iterable-Generator-Iterator

**引入:**可以 iterable 的数据使用 generator 的方法生成 iterator,针对数据流进行操作。通过 Iterator 对象,在每次调用时( __next__()或者next())才真正计算取值,减少内存的使用;

Iterable - 可迭代对象

what:python中任意对象,只要定义了可以返回一个迭代器的 __iter__方法,或者定义了可以支持下标索引的 __getitem__方法,则该对象为可迭代对象。一句话,可迭代对象就是能够提供迭代器的任意对象。之后会介绍 - 什么是迭代器

举例:

  • 序列类型
    • list
    • str
    • tuple
  • 非序列类型
    • dict
    • file
    • 任何实现了 __iter__ 方法的类
    • 任何实现了 __getitem__() 的类

Iterator - 迭代器

what:python中任意对象,只要定义了next(python2)或者 __next__ 方法,它就是迭代器。

迭代器 Iterator是一个让你可以遍历一个容器(可迭代对象 Iterable)的对象,一个迭代器在遍历并读取一个容器的数据元素时,并不会执行一个迭代 Iteration

Iteration - 迭代

what:从容器中取出元素的过程,当我们使用一个循环来遍历某个对象时,这个过程就叫迭代。

Generator - 生成器

what:首先,生成器也是一个迭代器,但只能迭代一次;因为生成器没有将所有的结构存在内存中,而是运行时使用 yield 生成值。

how:根据生成器的定义,我们可以想到生成器应用场景 - 当不想同一时间将所有计算结果计算出来的大量结果集放入内存中时,或读取大文件时避免消耗大量资源,可以通过遍历来使用生成器,for 循环或将生成器传递给任何可以进行迭代的函数和结构,利用其运行时生成值的特性。如下是两个生成器的列子:

# example 1:
def generator_fun():
    for i in range(5):
        yield i

for item in generator_fun():
    print(item)

# output:
# 1
# 2
# 3
# 4
# 5

# example 2:计算斐波那契数列
def fibon(n):
    a = b = 1
    for i in range(n):
        yield a # 调用时生成值,不会同时将所有值放入内存
        a, b = b, a + b
# 使用
for x in fibon(1000000):
    print(x)

总结:

名词定义实现/用途
Iterator一个对象,代表了一串数据流使用__next__() 方法或内置函数 next() 返回连续的对象,没有数据返回时,抛出 StopIteration 异常
Iterable一个对象,能每次返回数据组中的一个成员for 循环中每次返回一个值或内置函数 iter() 传入参数返回 iterator 对象
Generator使用了 yield 或者生成器表达式,生成 iterator 对象用一种方法便实现了 iterator ,在 for 循环取数据或使用 next() 取数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值