栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python---生成器对象[自定义迭代器],生成器表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python---生成器对象[自定义迭代器],生成器表达式

生成器对象

生成器本质还是迭代器,只不过是我们自己通过写代码产生的, 也有__iter__ 和__next__方法.

生成器对象也是节省空间存储的, 特性与迭代器对象一致.

当函数体代码中含有yield关键字时,第一次调用函数并不会执行函数体代码, 而是将函数变成了生成器. 验证方法: 是否含有iter() 和 next()方法..

def index():
    print('你还记得我吗?')
    yield 123
    yield 123, 111
    print('是不是忘记我了!!!')
    yield 666

没有调用之前 index函数只是一个普通函数

print(index)   # 

加括号调用并接受结果: 不执行代码 而是变成了生成器对象(迭代器)

res = index()
print(res)  # 

变成生成器之后调用__next__就会开始执行函数体代码

print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())


# 你还记得我吗?
# 123
# (123, 111)
# 是不是忘记我了!!!
# 666

如果函数体代码中含有多个yield关键字  执行一次__next__返回后面的值并且让代码停留在yield位置 
再次执行__next__基于上次的位置继续往后执行到下一个yield关键字处
如果没有了 再执行也会报错  StopIteration

# Traceback (most recent call last):
#   File "C:/me/JetBrains/pythonProject/迭代器生成器/生成器.py", line 14, in 
#     print(res.__next__())
# StopIteration

yield 类似于普通函数中的return关键字, yield后边有多少数据便返回多少数据. 

yield 关键字作用

1. 在函数体代码中出现, 可以将函数变成生成器.

2. 在执行过程中, 可以将后面的值返回去, 类似于return.

3. 可以暂停住代码的运行

4.还可以接受外界的传值(了解)

 
def study(name):
    print(f'{name}准备学习')
    while True:
        course = yield
        print(f'{name}正在学习{course}')
res = study('yietong')

res.__next__()
res.__next__()
res.__next__()
res.__next__()

res.send('English')
res.send('Chinese')

# yietong准备学习
# yietong正在学习None
# yietong正在学习None
# yietong正在学习None
# yietong正在学习English
# yietong正在学习Chinese

生成器表达式

res = (i for i in 'yietong')
print(res)  #  at 0x0000013764C2E150>

print(res.__next__())  # y
print(res.__next__())  # i
print(res.__next__())  # e
print(res.__next__())  # t
print(res.__next__())  # o

生成器内部的代码只有在调用__next__迭代取值的时候才会执行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号