我是靠谱客的博主 寒冷可乐,这篇文章主要介绍生成器及推导式,现在分享给大家,希望可以做个参考。

一、生成器——自己写的函数

1、只要有yield关键字的函数都是生成器函数

2、yield关键字不能与return关键字同时使用

3、return结束函数,yield不结束函数,生成器函数执行之后得到一个生成器作为返回值

return与yield的区别

复制代码
1
2
3
4
5
6
def ger(): print('hello') yield 'Hi' ret=ger() print(ret) #<generator object ger at 0x00000137A9D985E8>#结果
复制代码
1
2
3
4
5
6
7
def ger(): print('hello') return 'Hi' ret=ger() print(ret) #hello#结果 #Hi

yield的使用

复制代码
1
2
3
4
5
6
7
def ger(): print('hello') yield 'Hi' ret=ger() print(ret.__next__()) #hello结果 #Hi
'''
复制代码
1
def ger():
print('hello')
yield 'Hi'
yield '春暖花开'
ret=ger()
print(ret.__next__())
print(ret.__next__())


#hello
#Hi
#春暖花开
复制代码
1
'''
'''
复制代码
1
def ger():
print('hello')
yield 'Hi'
yield '春暖花开'
yield '面朝大海'
ret=ger()
for fr in ret:
print(fr)
复制代码
1
#hello结果
#Hi
#春暖花开
#面朝大海
'''

 二、推导式

分类:列表推导式(相对用的多)、生成器推导式,字典推导式;

列表推导式ret=[满足条件的元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关条件]

例如30以内能被3整除的数的列表推导式:ret=[i for i in range(30) if i%3==0]

生成器推导式g=(满足条件的元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关条件)

例如30以内能被3整除的数的生成器推导式:g=(i for i in range(30) if i%3==0)

例子:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def add(a,b): return a+b def rang(): for i in range(4): yield i g=rang() for n in [1,10,5]:#遇到这样的可拆分为如下''' '''中的代码 g=(add(n,i) for i in g) ''' #上面for里的代码等价如下: n=1 g=(add(n,i) for i in g)#(add(n,i) for i in rang()) n=10 g=(add(n,i) for i in g)#(add(n,i) for i in (add(n,i) for i in rang())) n=5 g=(add(n,i) for i in g)#g=(add(n,i) for i in (add(n,i) for i in (add(n,i) for i in rang())))#实际执行 ''' print(list(g))#

结果

 

转载于:https://www.cnblogs.com/jcb9426986/p/10758981.html

最后

以上就是寒冷可乐最近收集整理的关于生成器及推导式的全部内容,更多相关生成器及推导式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部