鱼C论坛

 找回密码
 立即注册
查看: 2210|回复: 1

[学习笔记] 函数-Ⅷ

[复制链接]
发表于 2023-3-12 16:34:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> # 在 Python 中,使用了 yield 语句的函数被称为生成器(generator)。
>>> # 与普通函数不同的是,生成器是一个返回生成器对象的函数,它只能用于进行迭代操作,更简单的理解是 —— 生成器就是一个特殊的迭代器。
>>> # 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 yield 方法时从当前位置继续运行。
>>> def counter():
...         i = 0
...         while i <=5:
...                 yield i
...                 i += 1
...

>>> # 调用 counter() 函数,得到的不是一个返回值,而是一个生成器对象:
>>> counter
<function counter at 0x016C7778>
>>> counter()
<generator object counter at 0x01B2CB50>
>>> for i in counter():
...         print(i)
...
0
1
2
3
4
5
>>> # 注意:生成器不像列表、元组这些可迭代对象,你可以把生成器看作是一个制作机器,它的作用就是每调用一次提供一个数据,并且会记住当时的状态。而列表、元组这些可迭代对象是容器,它们里面存放着早已准备好的数据。

>>> >>>
>>> # 生成器可以看作是一种特殊的迭代器,因为它首先是 “不走回头路”,第二是支持 next() 函数:
>>> c = counter()
>>> next(c)
0
>>> next(c)
1
>>> next(c)
2
>>> next(c)
3
>>>
>>> next(c)
4
>>> next(c)
5
>>> next(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

>>> # 当没有任何元素产出的时候,它就会抛出一个 “StopIteration” 异常。
>>> # 斐波那契数列。
>>> def fib():
...         back1, back2 = 0, 1
...         while True:
...                 yield back1
...                 back1,back2 = back2, back1 + back2
...
>>> f = fib()
>>> next(f)
0
>>> next(f)
1
>>> next(f)
1
>>> next(f)
2
>>> next(f)
3
>>> next(f)
5

>>> # 生成器表达式
>>> (i ** 2 for i in range(10))
<generator object <genexpr> at 0x01B2CD48>
>>> t = (i ** 2 for i in range(10))
>>> next(t)
0
>>> next(t)
1
>>> next(t)
4
>>> next(t)
9
>>> next(t)
16
>>> next(t)
25
>>> next(t)
36
>>> next(t)
49
>>> next(t)
64
>>> next(t)
81
>>> next(t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-31 16:54:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表