首页 > 编程语言 > 详细

python3生成器

时间:2019-05-11 17:56:07      阅读:136      评论:0      收藏:0      [点我收藏+]

一、生成器函数

1.yield关键字

定义:含义yield关键字的函数,是生成器函数

作用:返回值,不终止函数,若yield后无值,则返回None

用法:与return关键字不能共存,必须在函数内部

2.调用函数

调用生成器函数返回的是生成器

3.常用方法

1)__next__()

格式:生成器.__next__()

作用:执行生成器函数内部代码,遇到yeild关键字停止,并返回值,若没有yield作为结尾,会报错

# 生成器函数
def generator():
    print(1)
    yield a
    print(2)
    yield c


g = generator()     # g是生成器
print(g)
ret = g.__next__()  # 执行生成器函数内部代码直到遇到yield
print(ret)

2)for循环

作用:执行生成器内部代码,结尾不是yield关键字,不会报错

# 生成器函数
def generator():
    print(1)
    yield a
    print(2)
    yield c


g = generator()     # g是生成器
for i in g:
    print(i)

3)send()

格式:send(传递的数据)

作用:执行下面的代码,给上一个yield位置传递数据

注意:不能在初始或最后使用send()方法

def generator():
    print(1)
    count = yield a
    print(count)
    print(2)
    yield c


g = generator()     # g是生成器
ret1 = g.__next__()
print(>>>{}.format(ret1))     # str格式输出 format
# g.__next__()
ret2 = g.send(a123)
print(***%s % ret2)       # 格式化输出

4)yield from

作用:简化代码

格式:yield from 可迭代对象

def generator():
    # for i in range(10):
    #     yield i
    yield from range(10)    # 和for循环的作用一样


g = generator()
for i in g:
    print(i)    

 

二、生成器表达式

1.格式:生成器 = (为True操作 for i in 可迭代对象 if 条件)

2.分类

遍历

筛选

# 遍历,1-10
g = (i for i in range(1, 11))
for i in g:
    print(i)
# 筛选
g = (i**2 for i in range(10) if i > 5)
for i in g:
    print(i)

 

三、推导式

1.列表推导式

# 遍历,1-10
li1 = [i for i in range(1, 11)]
print(li1)

# 筛选
li2 = [i**2 for i in range(10) if i > 5]
print(li2)

列表推导式和生成器表达式的区别:

1)格式:列表推导式[],生成器表达式()

2)内存消耗:生成器表达式消耗内存少

2.字典推导式

# 把value值变成大写
dic = {k1: v1, k2: v2, k3: v3}
dic1 = {k: dic[k].upper() for k in dic}
print(dic1)
# 筛选
dic2 = {k: dic[k] for k in dic if dic[k] == v3}
print(dic2)

3.集合推导式

# 遍历
set1 = {-1, 1, -2, 2}
set2 = {i**2 for i in set1}     # 集合,去重
print(set2)

# 筛选
set3 = {i*i for i in set1 if i == 2}
print(set3)

 

python3生成器

原文:https://www.cnblogs.com/wt7018/p/10849397.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!