如何使用.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
相关产品推荐
相关产品推荐

