当前位置: 首页 > 图灵资讯 > 行业资讯> python中yield生成器用法详解

python中yield生成器用法详解

发布时间:2025-09-25 10:58:04

简单地说,yield是一个生成器。生成器就是这样一个函数。它记住上次返回时函数体中的位置。第二次(或第一次)生成器函数 n 第二次调用跳转到函数中间,并且上次调用的所有局部变量保持不变。

生成器是一个函数,

保留函数的所有参数,

第二次调用此函数时,

使用的参数是前一次保留的。

在流控结构中,生成器也“记住”了它。

生成器不仅“记住”了它的数据状态。 生成器还“记住”了它在流控制结构中的位置(在命令编程中,它不仅仅是数据值)。因为连续性让你在执行框架之间跳转,而不是总是回到直接调用器的上下文(就像生成器一样),所以还是比较一般的。

yield生成器的运行机制

当你要求生成器一个数字时,生成器将执行直到它出现 yield 句子,生成器把 yield 给你参数,然后生成器就不会继续下去了。 当你问他下一个数字时,他会从最后一个状态开始工作,直到yield语句出现,给你参数,然后停止。这样重复,直到函数退出。

例子:Python 排列,组合生成器

生成全排列

defperm(items,n=None):
ifnisNone:
n=len(items)
foriinrange(len(items)):
v=items[i:i+1]
ifn==1:
yieldv
else:
rest=items[:i]+items[i+1:]
forpinperm(rest,n-1):
yieldv+p

生成组合

defcomb(items,n=None):
ifnisNone:
n=len(items)
foriinrange(len(items)):
v=items[i:i+1]
ifn==1:
yieldv
else:
rest=items[i+1:]
forcincomb(rest,n-1):
yieldv+c

a=perm('abc')
forbina:
printb
break
print'-'*20
forbina:
printb

结果如下:

102pvopf006~/test>./generator.py
abc
--------------------
acb
bac
bca
cab
cba

由此可见,生成器在第一个循环break之后没有继续执行,而第二个循环则是第一个循环执行。

相关文章

python中yield生成器用法详解

python中yield生成器用法详解

2025-09-25
详解Python的函数嵌套

详解Python的函数嵌套

2025-09-25
手把手教你使用sublime搭建python开发环境

手把手教你使用sublime搭建python开发环境

2025-09-25
Python正则表达式的七个使用范例

Python正则表达式的七个使用范例

2025-09-25
Python的内建比较函数cmp比较原理剖析

Python的内建比较函数cmp比较原理剖析

2025-09-25
警惕python中的*重复符(运算符)

警惕python中的*重复符(运算符)

2025-09-25