前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成器及推导式

生成器及推导式

作者头像
py3study
发布2020-01-17 11:57:10
3490
发布2020-01-17 11:57:10
举报
文章被收录于专栏:python3

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

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

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

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

return与yield的区别

代码语言:javascript
复制
def ger():
    print('hello')
    yield 'Hi'
ret=ger()
print(ret)
#<generator object ger at 0x00000137A9D985E8>#结果
代码语言:javascript
复制
def ger():
    print('hello')
    return 'Hi'
ret=ger()
print(ret)
#hello#结果
#Hi

yield的使用

代码语言:javascript
复制
def ger():
    print('hello')
    yield 'Hi'
ret=ger()
print(ret.__next__())
#hello结果
#Hi
'''
代码语言:javascript
复制
def ger():
    print('hello')
    yield 'Hi'
    yield  '春暖花开'
ret=ger()
print(ret.__next__())
print(ret.__next__())

#hello
#Hi
#春暖花开
代码语言:javascript
复制
'''
'''
代码语言:javascript
复制
def ger():
    print('hello')
    yield 'Hi'
    yield  '春暖花开'
    yield  '面朝大海'
ret=ger()
for fr in ret:
    print(fr)
代码语言:javascript
复制
#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)

例子:

代码语言:javascript
复制
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))#

结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、生成器——自己写的函数
  •  二、推导式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档