有勇气的牛排博客

Python 的 yield 关键字有什么作用?

有勇气的牛排 439 Python 2024-08-21 22:35:21

Python 的 yield 关键字有什么作用?

前言

1、yield 是Python中的一个关键字,用于在函数中生成一个生成器

2、与普通返回值不同的是,yield会暂停函数的执行,并返回一个值,而函数的状态会被保留,以便下次执行。

3、yield 特别适合处理大数据或流式处理的场景,因为它允许函数生成一个序列的值,而不是一次性将所有数据加载到内存中。

人类语言描述:yield是一个关键字,可以暂停函数执行(函数挂起),并返回序列值,等被执行到的时候才会取出数据,特别大数据(节省内存)和流式场景。

当使用next()、send()函数,即可以从断点处继续执行。

1 生成器函数

def my_generator(): for i in range(5): yield i gen = my_generator() print(next(gen)) # 5 print(next(gen)) # 4

yield 生成器函数

2 节省内存

案例作用: 循环输出 0 - limit 的数值

常规思路:提前生成放到列表中,或使用range

yield优点:直到执行到的时候,才计算具体值,完全不需要提前计算好值,即可以节省内存。

def generate_numbers(limit): num = 0 while num < limit: yield num num += 1 for num in generate_numbers(1000): print(num) # 逐个生成并输出数字

yield节省内存

3 状态保留

每次 yield 被调用时,函数的执行状态都会被保留,包括局部变量,下一次执行时,则可以接着执行。

def countdown(n): while n > 0: yield n n -= 1 num = countdown(5) print(next(num)) # 5 print(next(num)) # 4

4 双向通信

允许外部传入数据

def echo(): while True: received = yield print(f"收到:{received}") e = echo() next(e) # 启动生成器 e.send('有勇气的牛排博客') # 收到:有勇气的牛排博客 e.send('666') # 收到:666

留言

专栏
文章
加入群聊