
python学习笔记4.1-python高级之生成器
在函数中使用for循环和yield语句。例如:
发布日期:2021-05-15 15:40:53
浏览次数:11
分类:精选文章
本文共 914 字,大约阅读时间需要 3 分钟。
生成器是一种在Python中用于创建迭代器的高级机制。通过在函数中使用yield关键字,可以将函数转换为生成器。生成器的特点是,每次遇到yield语句时,都会暂停执行,并返回相应的值,同时保留函数的状态,以便在下一次调用时继续执行。不仅生成器支持通过next()方法获取下一个值,生成器还可以通过send()方法向生成器传递参数,赋值给函数中声明的变量。
基本操作
生成器可以通过以下方式创建:
def func(): for i in range(10): yield i
- 使用列表推导式创建生成器。例如:
- 初始化生成器时,调用函数而不是跨发函数名。例如:
f = func()
- 使用next()方法来获取生成器的下一个值。例如:
f.next()
- 当生成器执行完所有yield语句后,会抛出StopIteration异常。
[i for i in range(10)]
当使用生成器时,需要注意以下几点:
send方法
生成器还支持send方法,可以向生成器传递参数进行处理。例如:
def func(): n = 0 while True: n = yield n
默认情况下,调用next()方法时,n会被赋值为0。调用send()方法时,可以传递参数进去。例如:
f.send(1) # n会被赋值为1f.send(2) # n会被赋值为2
应用
生成器的显著优势是有效支持内存有限的无限序列生成。例如:
def get_primes(number): while True: if is_prime(number): yield number number += 1
与传统的方法相比,生成器无需一次性构造整个列表,从而避免了内存限制问题。
总结来说,生成器通过懒评估(lazy evaluation)机制,不同于一般函数调用,生成器在遇到yield关键字时会暂停并保存当前状态,等待下次调用继续执行。这种机制尤其适用于需要生成大量数据但又无法一次性加载的场景。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月01日 19时35分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hadamard product 和 矩阵乘积
2019-03-12
函数可导和可微的区别: 一元中互为充要;多元中可微是可导的必要条件,可导不一定可微。
2019-03-12
一文说尽C++赋值运算符重载函数(operator=)
2019-03-12
Form窗体属性
2019-03-12