defread_large_file(file_path):withopen(file_path,'r')asfile:for line infile:yield line.strip()# 使用生成器逐行处理大文件for line in read_large_file('huge_file.txt'):
process_line(line)# 假设process_line是处理函数
无限序列
definfinite_sequence():
num =0whileTrue:yield num
num +=1# 生成无限序列(使用时需要限制)
gen = infinite_sequence()print(next(gen))# 0print(next(gen))# 1# 可以无限继续...
5. 高级特性
生成器双向通信
defgenerator_with_communication():
received =yield"Ready"while received:
received =yieldf"Received: {received}"
gen = generator_with_communication()print(next(gen))# 输出: Readyprint(gen.send("Hello"))# 输出: Received: Helloprint(gen.send("World"))# 输出: Received: World
yield from语法(Python 3.3+)
defchain_generators(*iterables):for it in iterables:yieldfrom it
result =list(chain_generators(range(3),'abc'))print(result)# 输出: [0, 1, 2, 'a', 'b', 'c']