文章目录参考书目:《intermediate Python》原书地址
前言一、可迭代对象二、迭代器三、迭代四、生成器
(1)基本概念(2)next()函数(3)生成器使用场景(4)可以迭代的数据类型举例
前言
首先介绍可迭代对象、迭代器和迭代三个概念。
然后介绍生成器。
一、可迭代对象
可迭代对象就是能提供迭代器的任意对象。
- 定义了可以返回⼀个迭代器的__iter__方法定义了可以支持下标索引的__getitem__方法
满足以上其中一点的,都可以称为可迭代对象。
二、迭代器只要满足一下条件中的一个就可称为迭代器:
- 定义了next方法;(Python 2 版本)定义了__next__方法;
使用循环来遍历某个数据结构时
这个过程本身就叫迭代。
只能对其迭代⼀次的一种迭代器
在运行时生成值,并没有在内存中
生成器一般以函数实现,或者使用for循环
举个简单的例子:
def Generation_Function():
for i in range(10):
yield i
for item in Generation_Function():
print(item)
输出结果是:
0 1 2 3 4 5 6 7 8 9(2)next()函数
Python内置函数
获取⼀个序列的下⼀个元素
当你计算机同时算出来大量结果时候
为避免浪费资源
函数将返回生成器而不是列表
例子:生成斐波那契数列
生成器 “生出” a的值,然后用next()函数进行迭代显示。
def fibon(n):
a = b = 1
for i in range(n):
yield a
a, b = b, a + b
gen = fibon(50)
while True:
print(next(gen))
展示前面若干个看一下:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229
最后面报个了迭代异常:
这个异常告诉我们,所有的值都已经被yield完了。
--------------------------------------------------------------------------- StopIteration Traceback (most recent call last) C:UsersADMINI~1AppDataLocalTemp/ipykernel_13688/2986638918.py in(4)可以迭代的数据类型举例6 gen = fibon(50) 7 while True: ----> 8 print(next(gen)) StopIteration:
可迭代对象并不能直接就用next()函数迭代
先生成迭代器,然后再用next()
举例子:
string = "My name is Jianlu."
while True:
print(next(string))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:UsersADMINI~1AppDataLocalTemp/ipykernel_13688/1397137853.py in
1 string = "My name is Jianlu."
2 while True:
----> 3 print(next(string))
TypeError: 'str' object is not an iterator
如何使字符串变量能进行迭代呢?
使用内置方法:iter()。
string = "My name is Jianlu."
string = iter(string)
while True:
print(next(string))
M
y
n
a
m
e
i
s
J
i
a
n
l
u
.
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
C:UsersADMINI~1AppDataLocalTemp/ipykernel_13688/3526468760.py in
2 string = iter(string)
3 while True:
----> 4 print(next(string))
StopIteration:



