首页 > 编程语言 >Python之生成器

Python之生成器

时间:2023-01-29 00:55:28浏览次数:54  
标签:end Python 生成器 yield next print 执行

"""
生成器说明:
1、生成器一次只返回一个数据;
2、yield 把函数变成了一个生成器;
3、生成器函数的执行过程看起来就是不断地 执行->中断->执行->中断 的过程;
4、一开始,调用生成器函数的时候,函数不会立即执行,而是返回一个生成器对象;
然后,当我们使用 next() 作用于它的时候,它开始执行,遇到 yield 语句的时候,执行被中断,并返回当前的迭代值,
要注意的是,此刻会记住中断的位置和所有的数据,也就是执行时的上下文环境被保留起来;
5、当再次使用 next() 的时候,从原来中断的地方继续执行,直至遇到 yield ,如果没有 yield,则抛出异常。
"""


def counter():
    """
    1、调用该函数的时候不会立即执行代码,而是返回了一个生成器对象;
    2、当使用 next() (在 for 循环中会自动调用 next() ) 作用于返回的生成器对象时,
        函数开始执行,在遇到 yield 的时候会『暂停』,并返回当前的迭代值;
    3、当再次使用 next() 的时候,函数会从原来『暂停』的地方继续执行,直到遇到 yield 语句,
        如果没有 yield 语句,则抛出异常;
    """
    i = 0
    while i <= 5:
        yield i  # 定义一个生成器
        i += 1


print(counter())  # 返回一个生成器对象如:<generator object counter at 0x00000252D8E9CAC0>

# 遍历生成器
for i in counter():
    print(i, end=" ")
"""
0 1 2 3 4 5 
"""

# 生成器一次只生成一个数据
c = counter()
print()
print(next(c), end=" ")  # 0
print(next(c), end=" ")  # 1
print(c.__next__(), end=" ")  # 2
# ...

c.close()  # 关闭生成器,再次调用会抛异常

print()
print("#### 生成器表达式 ####")
t = (i ** 2 for i in range(1, 10))
for i in t:
    print(i, end=" ")  # 1 4 9 16 25 36 49 64 81


#### send()方法:同next功能,但是会给yield表达式的变量赋值 ####
def demo():
    value1 = yield 1
    print("value1", value1)
    value2 = yield 2
    print("value2", value2)
    value3 = yield 3
    print("value3", value3)


print()
d = demo()
print(d.__next__())
print(d.send(5))
print(d.__next__())
"""
1
value1 5
2
value2 None
3
"""

 

标签:end,Python,生成器,yield,next,print,执行
From: https://www.cnblogs.com/gongxr/p/17071590.html

相关文章

  • Python之高阶函数
    #高阶函数functoolsimportfunctools#遍历序列元素为参数依次应用到函数中,最终返回累计的结果n=functools.reduce(lambdax,y:x+y,[1,2,3,4,5])print(......
  • [Python] 用描述符实现复用@property方法
    1Python内置的@property机制弊端在于不方便复用不能把它所修饰方法中的逻辑,套用在同一个类中的其他属性上。例如,编写一个类记录分数classGrade:def__init__(s......
  • 【Python基础学习】7.文件和数据格式化
    主要参考来源:慕课嵩天老师的“Python语言程序设计”[https://www.icourse163.org/course/BIT-268001?tid=1468130447]格式化包括字符串格式化和数据格式化字符串格式化:......
  • Python批量改文件名
    对以下路径中的文件名批量修改。一、读取指定路径中的文件名#导入标准库importos#读取文件名filesDir="路径……"fileNameList=os.listdir(filesDir)#输......
  • python-Couldn‘t find a tree builder with the features you requested: lxml
    执行BeautifulSoup(content,features='lxml')时报错,按照网上的方法安装lxml、重新安装lxml、安装指定版本lxml,都无效。最后发现只是PyCharm设置中project的pyth......
  • Python语言基础—常用运算符总结
    系列文章目录......
  • 2021年最新Python讲义:面向对象(OOP)基本概念
    面向对象(OOP)基本概念面向对象编程——​​ObjectOrientedProgramming​​​简写​​OOP​​目标了解面向对象基本概念01.面向对象基本概念我们之前学习的编程方......
  • 终于把Python库全部整理出来了,非常全面!
    Python库汇总篇!建议先马后看~文章目录​​前言​​​​学习爬虫需要掌握哪些库呢?​​​​通用​​​​网络爬虫框架​​​​HTML/XML解析器​​​​浏览器自动化与仿真​​......
  • Python 中的模块
    Python模块是一个Python文件,定义了各种功能接口。把复杂的功能封装为模块(又称为库),将功能实现的细节隐藏起来,使用该模块(库)的程序员不需要了解实现的细节。通过调用模块封......
  • Python基础——第一部分
    x进制类型定义\(0b****\):用二进制定义整型\(0o****\):用八进制定义整型\(0x****\):用十六进制定义整型a=0b1111b=15c=0o17d=0x0F输出:转换\(bin()\):......