生成器
生产者消费者模式
import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send(i)
c2.send(i)
producer("alex")
def logger(filename,channel='file'):
"""
日志方法
:param filename: log filename
:param channel: 输出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
:return:
"""
print('start logger')
while True:
msg = yield
print("msg",msg)
l = logger('a')
l.__next__()
l.send('hi')
l.send('hi2')
输出:
start logger
msg hi
msg hi2
生成器, list,islice 可以直接作用在迭代器上
def index_words_iter(text):
if text:
yield 0
for index,letter in enumerate(text):
if letter == ' ':
yield index + 1
address = "Four score and seven years ago. .."
a = index_words_iter(address)
print(a,type(a),next(a))
result = list(index_words_iter(address))
from itertools import islice
print(result)
it = index_words_iter(address)
results = islice(it,0,3)
print(list(results))
输出:
[0, 5, 11]
<generator object index_words_iter at 0x0000000009FAD8E0> <class 'generator'> 0
[0, 5, 11, 15, 21, 27, 32]
[0, 5, 11]
生成器读取文件
def index_file(handle):
offset = 0
for line in handle:
if line:
yield offset
for letter in line:
offset +=1
if letter == '':
yield offset
# 运行这个生成器函数,也能产生和原来相同的效果。
with open('/tmp/address.txt','r') as f:
it = index_file(f)
results = islice(it,0,3)
print(list(results))
# 输出: [0,5,11]
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!