当前位置: 首页 > news >正文

神奇的python的生成器

函数生成器代码

def num():print("message 1")yield 1print("message 2")yield 2print("message 3")yield 3f = num()
x = next(f)  # message 1
print(x)  # 输出1x = next(f)  # message 2
print(x)  # 输出2x = next(f)  # message 3
print(x)  # 输出3

执行分析

  1. 在num函数中有yield关键字,此时,num就不是一个函数了,而是一个生成器,
  2. 当调用next函数的时候,会执行到第一个yield,因此会打印message 1,此时生成器返回了yield后面的值,即1
    所以print(x)的时候打印了1
    此时生成器对象卡在了 yield 1这行
  3. 当再次调用next函数的时候,代码是从上次卡在的地方继续执行,所有打印了message 2,并且生成器对象返回了2,此时生成器卡在了 yield 2

自定义类生成器代码


class MySquare:def __init__(self, maxNum: int):self.maxNum = maxNumself.current = 0def __iter__(self):return selfdef __next__(self):result = self.current ** 2self.current += 1if self.current > self.maxNum:raise StopIterationreturn resultmySquare = MySquare(5)  # mySquare此时是一个可以迭代的对象,可以像list一样for循环
for t in mySquare:print(t)

等价上面的代码


def funSquare(num):for x in range(num+1):yield x ** 2print("**" * 10)
for x in funSquare(5):print(x)
http://www.lryc.cn/news/196207.html

相关文章:

  • 【来点小剧场--项目测试报告】个人博客项目自动化测试
  • 【安卓环境搭建报错的解决】
  • Pruning Pre-trained Language Models Without Fine-Tuning
  • Java内存模型-Java Memory Model(JMM)-可见性、原子性、有序性
  • 基于Springboot实现在线答疑平台系统项目【项目源码+论文说明】
  • 前端工程化知识系列(1)
  • xml文件报错 ORA-00907: 缺失右括号
  • VScode platformio的使用
  • transformer_01
  • JavaSE入门---认识方法
  • 编译[Bug]——too few arguments for template template parameter “Tuple“ detected
  • 网工内推 | 南天软件,base北京,需持有CCIE认证,最高25k
  • Unity有限状态机的简易实现
  • 什么是NetApp的DQP和如何安装DQP?
  • Vue之Vue的介绍安装开发实例生命周期钩子
  • 【计网】计算机网络概述
  • 初识Java 14-1 测试
  • react常用的hooks有哪些?
  • Nacos config 配置中心详解
  • C++ UDP通信
  • 自由程序员想接私活?那你还不得知道这几个接单平台!最后一个就是宝藏!!
  • 二叉树与递归的相爱相杀
  • Docker 安装 reids
  • opensl学习——base16编码解码、base64编码解码、ASCII码表、扩展ASCII码
  • gazebo各种插件
  • C语言Free空指针会怎样?
  • 软件测试全套教程,软件测试自学线路图
  • 禁止浏览器缩放
  • 前端食堂技术周刊第 100 期:TS 5.3 Beta、ViteConf2023、Rspress 1.0、Fresh 1.5、Chrome 118
  • 汇川IT7000系列HMI使用脚本实现画面跳转时自动切换手自动模式