Python 中 生成器、迭代器、可迭代对象 的概念

本文介绍Python中的生成器概念,包括其定义方式与使用方法,并通过示例解释如何利用生成器实现斐波那契数列。此外,还探讨了生成器与迭代器的区别,以及如何在代码中判断生成器的存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成器

在 Python 中,一边循环一边计算的机制,称为 生成器(generator)

可以通过 next() 函数获得 generator 的下一个返回值

生成器 的两种表示方法:

1、将列表生成式的 [ ] 改为 ( )

[2*x for x in range(10)] => (2*x for x in range(10))

2、使用 yield 关键字

以裴波拉切数列为例


In [1]: def fib(max):    # fib 是生成器函数
   ...:     n, a, b = 0, 0, 1
   ...:     while n < max:
   ...:         yield b
   ...:         a, b = b, a + b
   ...:         n = n + 1
   ...:     return 'done'
   ...:

In [2]: fib(5)          # 具体的 fib(5) 才是生成器
Out[2]: <generator object fib at 0x05098CF0>

In [3]: g = fib(5)

In [4]: next(g)
Out[4]: 1
​
In [5]: next(g)
Out[5]: 1
​
In [6]: next(g)
Out[6]: 2
​
In [7]: next(g)
Out[7]: 3

In [8]: next(g)
Out[8]: 5
​
In [9]: from inspect import isgeneratorfunction  
​
In [10]: isgeneratorfunction(fib)                  # 判断是否是 generator function
Out[10]: True

In [11]: import types
​
In [12]: isinstance(fib(5), types.GeneratorType)    # 判断是否是 generator
Out[12]: True

迭代器,可迭代对象

能作用于 for 循环的都是 可迭代对象(Iterable),包括内置的 集合数据类型生成器

可以被 next() 函数调用并不断返回下一个值的对象称为 迭代器(Iterator)

生成器都是 Iterator对象,但 list、dict、str 虽然是 Iterable,却不是 Iterator
可以使用 iter() 将 Iterable 转换为 Iterator

In [13]: import collections

In [14]: isinstance('abc', collections.Iterable)       # 判断是否是 Iterable
Out[14]: TrueIn [15]: isinstance('abc', collections.Iterator)       # 判断是否是 Iterator
Out[15]: False

In [16]: isinstance(iter('abc'), collections.Iterator) 
Out[16]: True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值