You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.send()方法向Python生成器添加姓名与年龄信息

生成器.send()方法添加用户实现方案

原代码仅能从文件读取用户数据,要实现通过.send()向生成器添加新用户并同步存入guests字典,需修改生成器逻辑以接收并处理传入参数,以下是完整实现:

guests = {}

def read_guestlist(file_name):
    text_file = open(file_name, 'r')
    # 读取文件内的初始用户
    while True:
        line_data = text_file.readline().strip().split(",")
        if len(line_data) < 2:
            text_file.close()
            break
        name = line_data[0]
        age = int(line_data[1])
        guests[name] = age
        # 接收.send()传入的新用户数据
        new_guest = yield name
        if new_guest:
            new_name, new_age = new_guest.split(",")
            guests[new_name] = int(new_age)
            yield new_name
    # 文件读完后,持续接收新用户输入
    while True:
        new_guest = yield
        if not new_guest:
            break
        new_name, new_age = new_guest.split(",")
        guests[new_name] = int(new_age)
        yield new_name

guestlist_gen = read_guestlist("guest_list.txt")

# 读取前10个文件中的用户
maxi = 9
count = 0
for one in guestlist_gen:
    print(one)
    if count == maxi:
        break
    count += 1

# 用.send()添加新用户
print("\n新增用户:")
# 发送新用户数据,然后通过next获取yield的姓名
guestlist_gen.send("Alice,30")
print(next(guestlist_gen))
guestlist_gen.send("Bob,25")
print(next(guestlist_gen))

# 查看最终用户字典
print("\n全部用户信息:")
print(guests)

核心改动点:

  • 生成器内通过new_guest = yield name捕获.send()传入的参数,实现外部向生成器传递数据。
  • 文件读取完成后保留循环,持续接收.send()的输入,直到传入None终止生成器。
  • 每次接收到新用户数据后,拆分姓名与年龄并更新guests字典,同时yield出新姓名供外部输出。
  • 原代码中guestlist_gen.close()替换为break,避免提前关闭生成器,确保后续可继续添加用户。

内容的提问来源于stack exchange,提问作者Hani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:58:34