python 的 yield

本文深入探讨Python中生成器和协程的工作原理,包括简单的输出操作、列表生成及控制输出范围和速度的方法。通过具体示例,解析yield关键字的使用,以及如何通过next()和send()方法控制生成器的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)简单输出

用next、send

def foo():
	while True:
		s = yield 23
		print("res",s)
g = foo()
print(next(g))
print(g.send(45))
print(next(g))

>>23
>>res 45
>>23
>>res None
>>23

def foo():
	while True:
		yield 23
		# print("res",s)
g = foo()
print(next(g))
print(g.send(45))
print(next(g))

>>23
>>23
>>23

def foo():
	while True:
		s = yield 23
		# print("res",s)
g = foo()
print(next(g))
print(g.send(45))
print(next(g))

>>23
>>23
>>23


def foo():
	while True:
		s = yield 23
		print("res",s)
g = foo()
print(next(g))
# print(g.send(45))
print(next(g))


>>23
>>res None
>>23

 

(2)列表输出

用循环for

def foo(n):
	while n <= 1000:
		yield n
		n += 1 

for i in foo(0):
	print(i)

 

(a)控制输出范围和输出速度

def foo(n):
	while n <= 1000:
		yield n
		n += 1
for n in foo(99):
	print(n)

 (b)控制输出速度和输出时间?或是花样作死?

def foo(n):
	while n <= n**n:
		yield n
		n += 100000 

for i in foo(123):
	print(i)
#不明不白



def foo(n):
	while n <= n*n:
		yield n
		n *= 100000 

for i in foo(123):
	print(i)  
#作死了


def foo(n):
	while n <= n*n:
		yield n
		n *= 10
	print("stop") 
	
for i in foo(3):
	print(i)
#作死了

注:明细看到程序停滞了,是否可以利用这个停滞性作出一定的运用呢?

现象:

        我笔记本的cpu被使用了100%,物理内存是60%,我的机器还能正常运行。

判断:

       1.首先需要判断程序是否还在运行,可以用断言、print、断点、监控后台进程等

       2.利用时间装饰器对运行时间做一个统计对比

       3.直接程序的半个循环就退出

运用:

      (a)电脑死机、卡顿等这并不是一个好的运用;(b)

 

 

(3)思考动态取数和动态+时间戳取数的可能性

 

(4)思考“动态+随机”取数的可能性

 

(5)思考随机取随机数的可能性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值