首页 > 应用开发 > Python > Python 生成器的 send 方法
# Python 生成器的 `send` 方法
生成器的 `send` 方法是一个强大的特性,它允许在生成器运行过程中向生成器发送值,从而实现双向通信。
## 基本用法
```python
def my_generator():
print("启动生成器")
x = yield "第一次yield"
print(f"收到发送的值: {x}")
y = yield "第二次yield"
print(f"收到发送的值: {y}")
yield "结束"
gen = my_generator()
# 启动生成器
print(gen.send(None)) # 输出: 第一次yield (必须用None启动)
# 发送值到生成器
print(gen.send(10)) # 输出: 收到发送的值: 10
# 第二次yield
# 再次发送值
print(gen.send(20)) # 输出: 收到发送的值: 20
# 结束
```
## 关键点
1. **调用**必须使用 `send(None)` 或 `next()` 启动生成器,因为没有yield表达式可以接收值
2. `send(value)` 会恢复生成器执行,并将value作为当前暂停的yield表达式的返回值
3. 生成器会执行直到遇到下一个yield语句
4. `send()` 方法返回的是下一个yield表达式的值
## 实际应用示例
```python
def accumulator():
total = 0
while True:
value = yield total
if value is None:
break
total += value
acc = accumulator()
next(acc) # 启动生成器
https://zq-mobile.zhaopin.com/moment/73378919
https://zhiq.zhaopin.com/moment/73378919
https://zq.zhaopin.com/moment/73378893
https://zq-mobile.zhaopin.com/moment/73378893
https://zhiq.zhaopin.com/moment/73378893
https://zq.zhaopin.com/moment/73378887
https://zq-mobile.zhaopin.com/moment/73378887
https://zhiq.zhaopin.com/moment/73378887
https://zq.zhaopin.com/moment/73378884
https://zq-mobile.zhaopin.com/moment/73378884
https://zhiq.zhaopin.com/moment/73378884
https://zq.zhaopin.com/moment/73378880
https://zq-mobile.zhaopin.com/moment/73378880
https://zhiq.zhaopin.com/moment/73378880
https://zq.zhaopin.com/moment/73378876
https://zq-mobile.zhaopin.com/moment/73378876
https://zhiq.zhaopin.com/moment/73378876
https://zq.zhaopin.com/moment/73378868
https://zq-mobile.zhaopin.com/moment/73378868
print(acc.send(10)) # 输出: 10
print(acc.send(20)) # 输出: 30
print(acc.send(5)) # 输出: 35
acc.close() # 关闭生成器
```
## 注意事项
- 在生成器未启动或已结束时调用 `send()` 会抛出 `TypeError`
- `send()` 可以用于实现协程式的编程模式
- 结合 `yield from` 可以构建更复杂的生成器管道
生成器的 `send` 方法为生成器提供了与外部代码交互的能力,使得生成器不仅仅是数据生产者,还可以成为数据处理管道的一部分。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/34366/viewspace-3101293/ ,如需转载,请注明出处,否则将追究法律责任。