yield关键字返回的是一个可迭代的生成器, 只可以被遍历一次, 不可以重复的使用, 可以使用next()方法依次来拿出生成器里面的东西.
比如:
def foo():
for i in range(10):
yield i
it = foo() #在这里运行这个函数以后,返回的是一个可迭代的生成器.
for i in it:
print(i,next(it)) #在这里会看见非常魔法的现象,可以自行实验.
这就是yield的基本用法,以下是我用包装器写的一个多线程的打印函数,主要是为了观察变量的变化
import threading
from threading import Thread
from time import sleep
a = 3
def foo(f):
def xx(a):
while 1:
sleep(2)
print('传入的参数--->',a, '<--线程-->',threading.current_thread().name)
f(a)
return xx
@foo
def f(a):
print('被包装的函数:-->', a)
n = 1
print('开始了')
while n <= 4:
sleep(2)
a += 1
Thread(target=f, args=(a,)).start()
n += 1