import time
def func_y(data):
time.sleep(data)
return data * 2
def get_num(a):
"""
普通return 函数
"""
for i in range(a):
return func_y(i)
def get_num2(a):
"""
yield与return的区别是:
1、 yield返回的是生成器,通过next来获取函数返回的值,而且可以用于循环中,并且一个函数就可以同时返回多个值
2、如果使用return,那么就直接退出循环了,后面的代码将不会被继续执行
3、如果yield的是函数,那么函数会在next取值的时候才会运行。
"""
for i in range(a):
yield func_y(i)
rt1 = get_num(3) # return 0
rt2 = get_num2(3) # 返回生成器
print(f'rt1: {rt1}') # rt1: 0
print(f'rt2: {rt2}') # rt2: <generator object get_num2 at 0x000002E93B2356D8>
# 获取生成器rt2结果
# 法一:直接for遍历
for i in rt2:
print(i)
# 法二:while遍历
while True:
try:
print(next(rt2))
except Exception as StopIteration: # StopIteration异常,就说明生成器遍历完成
break
## yield from,用于跳转到新的函数,或者用于代替循环
# 比如代替循环:下面两个函数功能等价
def func0(i):
for x in range(i):
yield x
def func0_2(i):
yield from range(i)
f3 = func0(3)
for item in f3:
print(item)
"""
0
1
2
"""
# 跳转到函数,类似于下面两个函数后面的输出结果
def func1():
yield 1
yield from func2()
yield 2
def func2():
yield 3
yield 4
f1 = func1()
for item in f1:
print(item)
"""
1
3
4
2
"""