python的yield用法,python yield函数怎么用
Yield只是一个生成器。生成器是一个函数,当它最后一次被返回时,它会记住它在函数体中的位置。对生成器函数的第二次(或第n次)调用跳转到函数的中间,而最后一次调用的所有局部变量保持不变。
生成器是一个函数,
该函数的所有参数都被保留,
第二次调用这个函数时,
使用的参数是上次保留的。
生成器还“记得”它是在流控制中构造的。
生成器不仅“记住”其数据状态。生成器还“记住”它在流控制结构中的位置(在命令式编程中,这个结构不仅仅是一个数据值)。连续性仍然是通用的,因为它让你随意在执行框架之间跳转,而不是总是返回到直接调用方的上下文(就像一个生成器)。
yield生成器的运行机制
当你向生成器要一个数的时候,生成器会一直执行,直到yield语句出现,生成器会给你yield的参数,之后生成器就不会继续运行了。当你向他要下一个数字时,他会从上一个状态开始运行,直到yield语句出现,给你参数,然后停止。这一过程一直重复,直到函数退出。
示例:Python置换、组合生成器
生成全排列
defperm(项目,n=无):
ifnisNone:
n=len(项目)
foriinrange(len(items)):
v=项目[i:i 1]
ifn==1:
yieldv
else:
rest=items[: I]items[I 1:]
对于一个项目(其余,n-1):
伊尔德夫生成组合
defcomb(项目,n=无):
ifnisNone:
n=len(项目)
foriinrange(len(items)):
v=项目[i:i 1]
ifn==1:
yieldv
else:
其余=项目[i 1:]
forcincomb(其余,n-1):
yieldv c
a=烫发( abc )
福宾纳:
printb
破裂
打印-*20
福宾纳:
结果如下:印刷银行
102 ppopf 006 ~/测试。/generator.py
字母表
-
自动对比度平衡
二进制-模拟转换(binary analogue convert的缩写)
喹啉甲酸
驾驶室
在cba中可以看到,第一个周期中断后,生成器没有继续执行,而第二个周期跟在第一个周期之后。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。