2019独角兽企业重金招聘Python工程师标准>>>

yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值

简单理解:

>>>def t1():yield 1yield 2yield 3>>> t = t1();
>>> t.__next__()
1
>>> t.__next__()
2
>>> t.__next__()
3#又或者
>>> for v in t1():print(v)1
2
3
#注意:t1().__next__()这只会永远都返回1,因为每次都迭代了这个方法的不同实例
>>> t1().__next__()
1
>>> t1().__next__()
1
>>> t1().__next__()
1
>>> 

从上面可以看出实例化这个方法后,每次调用他的__next__()方法都返回yield后面的值

进一步

>>> def t2():yield 1print('hello1')yield 2print('hello2')yield 3print('hello3')>>> t = t2()
>>> t.__next__()
1
>>> t.__next__()
hello1
2
>>> t.__next__()
hello2
3
>>> t.__next__()
hello3
Traceback (most recent call last):File "<pyshell#72>", line 1, in <module>t.__next__()
StopIteration
>>> 

第一次执行next方法后,该方法只运行到 第一个yield后次方法就暂停执行了,直到再次调用该实例的next方法才会继续往下执行直到遇到下一个yield,该实例调用到第四次next方法后会继续往下执行,同时会抛出一个异常,表示该方法已经迭代完成了

对于send方法的理解:

>>> def t3():m = yield 1print('send1 value is ',m)n = yield 2print('send2 value is ',n)k = yield 3print('send2 value is ',k)>>> t = t3()
>>> t.send('one')#t.send(None)则不会报异常
Traceback (most recent call last):File "<pyshell#86>", line 1, in <module>t.send('one')
TypeError: can't send non-None value to a just-started generator
>>> t.__next__()
1
>>> t.send('one')
send1 value is  one
2
>>> t.__next__()# 返回None
send2 value is  None
3
>>> t.send('three')
send2 value is  three
Traceback (most recent call last):File "<pyshell#90>", line 1, in <module>t.send('three')
StopIteration

send方法是给yield 一个返回值,但在没做迭代直接调用send方法会报异常,每调用一次send方法相当于进行了一次迭代。如果通过调用next方法进行迭代,那么yield返回的是None

转载于:https://my.oschina.net/u/351612/blog/1527681

python yield的简单理解相关推荐

  1. Python中yield的简单理解

    yield常见用法:该关键字用于函数中会把函数包装为generator.然后可以对该generator进行迭代: for x in fun(param). 按照我的理解,可以把yield的功效理解为暂 ...

  2. python装饰器简单理解

    装饰器定义:1.把一个函数名当作实参传给另外一个函数(在不修改装饰函数源代码的情况下为其添加功能) 2.返回值中包含函数名(不改变函数调用方式) 源代码: 1 def f(): 2 def f(): ...

  3. python装饰器简单理解的小demo

    def multi_100(func):def demo(ls):# 这个函数是让列表前两个元素*100for i in range(2):ls[i] = (ls[i] * 100)func(ls)r ...

  4. python装饰器简单理解_python装饰器的简单理解

    如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以用类.偏函数实现) 再定义你 ...

  5. 五分钟理解yield在python中的简单用法,让你不再迷惑

    很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...

  6. php和python的多线程,Python多线程以及线程锁简单理解(代码)

    本篇文章给大家带来的内容是关于Python多线程以及线程锁简单理解(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 多线程threading 模块创建线程创建自己的线程类线程通 ...

  7. 人工智能:深度学习算法及应用——简单理解CNN卷积神经网络并python实现(带源码)

    深度学习算法及应用 一. 实验目的 二. 实验要求 三. 实验的硬件.软件平台 四. 实验原理 1.1. 深度学习概述 1.2. 深度学习的常见结构 1.3. 卷积神经网络(CNN) **卷积** * ...

  8. python语言的计算生态规模有多大_【单选题】Python 语言的一个重要特点是它有较多的计算生态,简单理解为第三方提供的可用编程模块 / 函数库 / 组件,这个规模有多大?...

    [单选题]Python 语言的一个重要特点是它有较多的计算生态,简单理解为第三方提供的可用编程模块 / 函数库 / 组件,这个规模有多大? 更多相关问题 [问答题,简答题] 顾客关系管理系统如何给企业 ...

  9. 简单理解头插法(Python实现)

    简单理解头插法(Python实现) ​ 最近一段时间刷leetcode遇到一个叫"两数相加"的题目,然后有一个步骤需要构建一个单链表(需要头插法或者尾插法),忘记算法怎么写了,然后 ...

最新文章

  1. 深度学习数据集定义与加载
  2. Strategy_Requirement1
  3. ExecutorService框架
  4. 无法获取到图片的宽高
  5. 全局异常处理_全局异常处理
  6. 应用环境下的TIME_WAIT和CLOSE_WAIT
  7. 不止代码:友好城市(动态规划)
  8. linux redis可视化工具,几款开源的图形化Redis客户端管理软件
  9. dnf时装预览怎么打开_DNF:史上最好看时装上线,大佬已经玩疯,全服都是真香的气息...
  10. 机器学习(九)初识BP神经网络
  11. asp代理商源代码_广告代理商的源代码是什么样的?
  12. 学习PHP-感谢帅哥分享O(∩_∩)O~
  13. 谷歌浏览器不能用flash插件的问题
  14. 微波遥感——法拉第旋转
  15. Tek TDS3054B保存波形的方法
  16. 差分运算放大器的计算
  17. 【Markdown】Markdown 中的Flow flowchart.js 的基础教程
  18. 【算法】Catalan数
  19. 手把手教你通过端口映射,轻松搭建Windows远程桌面
  20. 我是如何管理我的团队的?

热门文章

  1. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...
  2. python如何导入turtle_centos7里python导入turtle的问题
  3. CSDN ARIMA R语言_R语言实现Fleiss#39; Kappa系数处理多个观察者一致性检验
  4. cron 每小时_旺季招聘:高薪小时工!
  5. lm358数据手册_如何阅读运放的数据手册(1)查找数据手册
  6. 吴恩达机器学习笔记:(三)梯度下降法
  7. 【模型解读】从2D卷积到3D卷积,都有什么不一样
  8. 中国工业节能减排产业项目盈利模式及投资风险预警报告2021-2027年
  9. VC文件扩展名解读大全
  10. 福大软工1816:项目测评