Python:笔记(7)——yield关键字
Python:笔记(7)——yield关键字
yield与生成器
所谓生成器是一个函数,它可以生成一个值的序列,以便在迭代中使用。函数使用yield关键字可以定义生成器对象。
一个例子
我们调用该函数,就会发现其中的代码不会开始执行
def countdown(n):
print('从%d开始减少'%n)
while(n>0):
yield n
n-=1
return countdown(10)
相应的,该函数返回一个生成器对象。接着该生成器对象就会在__next__被调用时执行函数,如:
c = countdown(10)
# <generator object countdown at 0x102d0b780>
print(c.__next__())
# 10
print(c.__next__())
# 9
调用next时,生成器函数开始执行语句,直至遇到yield语句为止。yield语句在函数执行停止的地方生成一个结果,直至再次调用next。然后继续执行yield之后的语句。
生成器的用法
通常不会在生成器上直接调用next()方法,而是通过for语句,sum()或一些消耗序列的其他操作使用生成器。
for n in countdown(5):
print(n) print(sum(countdown(5)))
协程与yield表达式
在函数内,yield语句还可以作为表达式使用,出现在赋值运算符的右边,例如:
def receiver():
print('Ready to receive')
while True:
n = (yield)
print(n) r = receiver()
r.__next__()
# Ready to receive
r.send(1)
# 1
r.send(2)
# 2
r.send('Hello')
# Hello
以这种方式使用yield语句的函数称为协程,向函数发送值时函数将执行。接收到值后,协程就会执行语句,直至遇到下一个yield语句。
说明:一开始必须先执行next函数,这样协程才能执行第一个yield表达式之前的语句
关闭协程
协程一般会不断地执行下去,除非被显式关闭或自己退出,显式关闭执行close语句即可。
Python:笔记(7)——yield关键字的更多相关文章
- (转) Python Generators(生成器)——yield关键字
http://blog.csdn.net/scelong/article/details/6969276 生成器是这样一个函数,它记住上一次返回时在函数体中的位置.对生成器函数的第二次(或第 n 次) ...
- 解析Python中的yield关键字
前言 python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def fun(): for i i ...
- python中的yield关键字
yield关键字一直困扰了我很久,一直也没有弄明白,现在将暂时理解的yield记录如下,供参考: 关键词:可迭代对象,生成器,迭代器 一.可迭代对象: 可迭代对象:可迭代对象是一个泛称,只要可以用fo ...
- 深入理解python中的yield关键字
想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...
- python yield 关键字
最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下: >>> def createGenerator(): ... ...
- python协程--yield和yield from
字典为动词“to yield”给出了两个释义:产出和让步.对于 Python 生成器中的 yield 来说,这两个含义都成立.yield item 这行代码会产出一个值,提供给 next(...) 的 ...
- Python:容器、迭代对象、迭代器、生成器及yield关键字
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list, ...
- python笔记之itertools模块
python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
随机推荐
- webpack2.0简单配置教程
以前习惯用gulp+less来开发项目,由于公司项目用的vue开发的,所以学下webpack这个打包工具.以下是我学习时的笔记,希望给在webpack配置过程中遇到麻烦的朋友一丝帮助. 目前只配置了s ...
- swift -- 如何在swift下,使用类似oc的pch文件功能
以前在做oc下的项目的时候,pch文件是必创建的,因为实在是太方便了,只要在build setting里面把pch的路径换成绝对路径,那么剩下的,想干什么就在里面干什么,但是swift下,可以实现这种 ...
- Python IDLE背景设置与使用
相信刚进入python学习之路的朋友们,都还是挺喜欢python自带的IDLE,但是白的代码背景色以及其它的代码色确实让人看着有点不舒服,所以当时也琢磨着能不能自己给它换换颜色,这个当然可以,废话不多 ...
- oracle启动报ORA-03113;
[案例] 在重启数据库过程中: SQL> startup ORACLE instance started. Total System Global Area 1.0489E+10 bytes F ...
- 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象
类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...
- Jquery checkbox选中问题
checkbox中有.checked的写法,判断当前是否是选中状态,不过这种是针对[object HTMLInputElement]这种类型的,而对于[object Object]这种类型是不能使用的 ...
- ajax 跨域访问 :Access-Control-Allow-Origin
一说到ajax跨域.首先想到的就是jsonp . JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全. 即使使用jQuery的jsonp方法,type设为POST,也 ...
- LeetCode——Single Number
Description: Given an array of integers, every element appears twice except for one. Find that singl ...
- 【BZOJ2809】[Apio2012]dispatching 可并堆
[BZOJ2809][Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 M ...
- 阿里云搭建SVN服务器
1:安装svn apt-get install subversion 2. 开启svn服务器 svnserve -d 检查是否开启:ps aux | grep svnserve 若出现如下内容: wk ...