python函数工具——“三大器”

前天学习了迭代器,昨天放假在家中躺了1天,生活还是需要偶尔的惬意。今天继续学习生成器。
首先了解生成器是python中用于创建迭代器的一种便捷方式。生成器允许你定义迭代行为,而不需要像实现迭代器那样编写完整的类。生成器使用’yield’关键词逐个生成值,每次生成一个值之后,生成器函数会暂停其状态,并在下一次调用“__next__()”方法时恢复。
不用生成迭代器的类,而用有关键词‘yield’的函数。
生成器的两种创建方式:
1、使用生成器函数
2、使用生成器表达式
生成器函数
生成器函数与普通函数类似,但使用’yield’语句返回数据而不是’return’。每次调用‘yield’时,函数会暂停并保存当前状态,并在下一次调用’__next__()’方法时恢复。
def simple_generator():    yield 1    yield 2    yield 3
gen = simple_generator()
print(next(gen))  # 输出:1print(next(gen))  # 输出:2print(next(gen))  # 输出:3# print(next(gen))  # 再次调用会引发StopIteration异常
生成器表达式
生成器表达式与列表解释式类似,但返回的是一个生成器对象而不是一个列表。它们使用小括号而不是大括号。
gen_expr = (x * x for x in range(3))
print(next(gen_expr))  # 输出:0print(next(gen_expr))  # 输出:1print(next(gen_expr))  # 输出:4
生成器的优点:
  • 惰性求值(延迟计算):生成器需要时才会生成数据,节省内存,对处理大数据集非常有用。(对于一个数据集,发现某单个数据就挂起,而不要从头开始查找)
  • 简洁易读:使用 yield 关键字编写生成器函数,比手动实现迭代器类更加简洁。
  • 无状态保存:生成器自动保存函数执行状态,无需手动管理迭代器的状态。

使用’for’循环遍历生成器

生成器可以与 for 循环结合使用,无需显式调用 next() 函数,并且在生成器耗尽时自动处理 StopIteration 异常。

def countdown(n):    while n > 0:        yield n        n -= 1

for num in countdown(5):    print(num)

生成器的高级特性

‘send()’方法

生成器不仅可以通过 next() 函数获取值,还可以通过 send() 方法向生成器发送值。

‘close()’方法

close() 方法用于关闭生成器,终止其迭代。

‘throw()’方法

throw() 方法用于向生成器内部引发异常。

迭代器和生成器分别在什么样的场景使用?

  • 生成器:适用于按需生成数据、简化迭代器实现、处理复杂迭代逻辑、数据流水线处理。生成器使代码简洁,并节省内存。(简单)
  • 迭代器:适用于需要完整的迭代器协议、维护复杂对象状态、组合多个迭代器的场景。迭代器类提供更多的灵活性和控制。(复杂)

代码地带

生成器生成斐波那契数列

def fibonacci(limli):    a, b = 0, 1    while a < limli:        yield a        a, b = b, a + b

for num in fibonacci(200):    print(num)

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/87845.html

(0)
guozi's avatarguozi
上一篇 2024年6月3日 下午3:14
下一篇 2024年6月3日 下午3:16

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注