首页 > 编程语言 >python中yield关键字

python中yield关键字

时间:2023-05-26 09:24:51浏览次数:34  
标签:一次 函数 python yield next 关键字 print gen

yield 就是保存当前程序执行状态。
yield可以简单理解为return操作,但和return又有很大的区别。
执行完return,当前函数就终止了,函数内部的所有数据、内存空间,全部都没有了。
而yield在返回数据的同时,还保存了当前的执行内容,当你再一次调用这个函数时,他会找到你在此函数中的yield关键字,然后从yield的下一句开始执行。
用 yield 的函数,好处是不用一次计算所有元素,而是用一次算一次。
当有多个返回值时,用 return 全部一起返回了,需要单个逐一返回时可以用 yield。
带有yield的函数在Python中被称之为generator(生成器)

只要在def函数里面看到有 yield 关键字那么就是生成器

def generator():
    for i in range(1, 5):
        print('<----开始生成')
        yield i
        print('完成一次----->')


gen = generator()
print(next(gen))  # 函数第一次调用next(gen)函数时,generator函数从开始执行到yield,并返回yield的值。
print(next(gen))  # 在函数第二次调用next(gen)函数时,generator函数从上一次yield结束的地方继续运行(下一次循环),直至下一次执行到yield的地方,并返回yield的值
print(next(gen))

  

命令行执行 next指令如下:(注意上一次结束的地方和下一次开始的地方)

>>> print(next(gen))
<----开始生成
1
>>> print(next(gen)) 完成一次-----> <----开始生成 2
>>> print(next(gen)) 完成一次-----> <----开始生成 3
>>> print(next(gen)) 完成一次-----> <----开始生成 4
>>> print(next(gen)) 完成一次-----> Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> print(next(gen)) StopIteration print(next(gen))

  

 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常

标签:一次,函数,python,yield,next,关键字,print,gen
From: https://www.cnblogs.com/sangern/p/17433584.html

相关文章

  • Python实现JWT的生成及验证
    一、概述    在JWT安全性总结中提到了JWT的三个组成部分,包括header、claims以及signature,其中Signature是一个签名的部分,其计算方法为:HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret),即header的BASE64编码、点号、Clamis的BASE64编码以及将se......
  • Python求前后第n个月函数
    数据分析常用到:#求往后第n个月#monthstr格式:YYYY-MM##printnext_month("2023-05",1)#2023-06#printnext_month("2023-05",6)#2023-11#printnext_month("2023-05",8)#2024-01defnext_month(monthstr,n):yearnum=int(mont......
  • 如何在ubuntu下安装Vscode并且运行C语言文件或者python文件
    要想在ubuntu中编写并运行C语言或python文件,有两种方法,第一种是直接用vim编写(在我之前的文章中有详细介绍)可以点击如下链接:如何在ubuntu安装C语言环境-代师-博客园(cnblogs.com)如何在Ubuntu中编写Python代码并运行-代师-博客园(cnblogs.com) 今天我要说的是用专......
  • python 发送微信消息
    python自动化,可以模拟键盘输入,因此,可以控制微信,发送消息,代码如下:1importsys2importpyautogui3importpyperclip4importtime5importconfigparser67"""8安装依赖:9pipinstallpyautoguipyperclippyinstaller1011打包成exe:12pyins......
  • python 格式化代码
    安装pre-commitsudoaptinstallpre-commit-yrepos:-repo:https://github.com/python/blackrev:23.3.0hooks:-id:blacklanguage_version:python3exclude:src/ratel/potargs:["--line-length","18......
  • python计算余弦相似性和汉明距离
    要使用矩阵相乘来计算7个二进制编码之间的余弦相似性,我们需要先将二进制编码转换为数值向量。对于每个二进制编码,我们可以将0映射为-1,将1映射为1,从而得到一个数值向量。然后,我们可以将这些数值向量表示为一个矩阵,并进行矩阵相乘来计算余弦相似性。以下是一个示例代码,使用Python和......
  • Python竖版大屏2 | 用pyecharts开发可视化的奇妙探索!
    目录1、SHINE主题2、LIGHT主题3、MACARONS主题4、INFOGRAPHIC主题5、WALDEN主题6、WESTEROS主题7、WHITE主题8、WONDERLAND主题你好!我是@马哥python说,一名10年程序猿,正在试错用pyecharts开发可视化大屏的非常规排版。以下,我用8种ThemeType展示的同一个可视化数据大屏,可视化主题......
  • python试题
    1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20. 程序题1    程序题2     附加题        一、选择题每题4分1.关于二进制,八进制,十进制,十六进制的表示方......
  • Python集合 (set) 的增删改查及 copy()方法
    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:1、去重,把一个列表变成集合,就自动去重了。2、关系测试,测试两组数据之前的交集、差集、并集等关系。一、集合的创建set1=set({1,2......
  • Hello World II - python垂直输出Hello World
    描述垂直输出"HelloWorld",全部代码不超过2行。 输入无输出Hello Worldstr="HelloWorld"fornameinstr[:]:print(name)修改:开始没看到要求不超过两行,正确代码为:fornamein"HelloWorld":print(name)题目来源:python123.io......