遍历

本文最后更新于:2023年12月5日 晚上

普通的 for 循环

>>>i = 0
>>> seq = ['one', 'two', 'three']
>>> for element in seq:
...     print i, seq[i]
...     i +=1
...
0 one
1 two
2 three

for 循环使用 enumerate

>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
...
0 one
1 two
2 three

for 循环使用 range

range() 创建一个整数列表

for i in range(5):
    print(i)
0
1
2
3
4

迭代器

迭代就是遍历,一个实现了__iter__方法和__next__方法的对象,就是迭代器。

手写一个迭代器: __init__初始化变量; __next__处理变量; __iter__返回self

生成器

利用迭代器,我们可以在每次迭代获取数据(通过 next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合 next()函数进行迭代使用,我们可以采用更简便的语法,即生成器(generator)。生成器是一类特殊的迭代器

创建生成器 1

要创建一个生成器, 方法有很多, 第一种方法很简单, 只要把列表的[]改成()就可以了

L = [x*2 for x in range(5)]
G = (x*2 for x in range(5))

创建生成器 2

简单的来说, 只要在 def 中有 yield 关键字的就称为生成器
函数会保存 yield 标记的变量, next()唤醒生成器, 获取到 yield 标记的变量
除了 next(), 还可以使用 send()唤醒, send()相比 next()的优势是可以传参, next()等价于 send(None)
但是第一次唤醒只能是 next()或者 send(None), 不能传一个非 none 值给一个未启动的生成器, 这点区别于 PHP

当执行 next()时,第 1 个 yield 到第二个 yield 之间的的语法被执行。然后返回第二个 yield 标记的值


遍历
http://blog.lujinkai.cn/Python/基础/遍历/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议