Python:生成器函数
生成器函数:包含yield语句的函数;
生成器对象:生成器对象和迭代器对象行为相似,都支持可迭代接口:__next__(),若想执行生成器函数内部语句,则需要迭代协议’
A、生成器函数被调用时,并不会执行函数内部语句,而是返回一个生成器对象;
B、每执行一条语句,返回对应的一个yield数值,虽然函数被yield临时返回了数值,但保留了程序运行的状态,即在此执行g.__next__()时,则继续执行函数语句,并返回第二个yield对应的数值;当执行完所有的yield返回值后,程序抛出停止迭代异常:StopIterstion;这种行为和迭代器一样,实现了迭代器的接口。
def f():
print('in f(), 1')
yield 1 print('in f(), 2')
yield 2 print('in f(), 3')
yield 3 g = f()
print(g)
# 输出:<generator object f at 0x056F8210>,是一个生成器对象;
print(g.__next__())
# 输出:in f(), 1
1
print(g.__next__())
# 输出:in f(), 2
2
print(g.__next__())
# 输出:in f(), 3
3
print(g.__next__())
# 输出:StopIteration
C、生成器对象也是一个可迭代的对象,即它可以放在for循环中in的后面,则说明生成器对象实现了__iter__()方法,返回了其自身;
for x in g:
print(x)
#输出:in f(), 1
1
in f(), 2
2
in f(), 3
3
D、生成器对象即实现了迭代器接口(__next__()),又实现了可迭代接口(__iter__()),返回其自身;
print(g.__iter__() is g) # 输出 True
Python:生成器函数的更多相关文章
- python 生成器函数.推导式.生成器表达式
一.生成器 什么是生成器,生成器的实质就是迭代器 在python中有三种方式来获取生成器: 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过数据的转换也可以获取生成器 1 def func ...
- day13 python生成器函数 推导式 生成器
day13 python 一.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样. 取值方式和迭代器一样(__next__()) 由生成器函数或生成器表达式来创建 ...
- Python 生成器函数
def func(): print("我叫周润发") return "林志玲" # return在函数中表示返回的意思 ret = func() print(& ...
- python生成器函数中return的作用
当生成器函数中含有return时,return不会返回任何值,会直接终止当前生成器,对yield的作用没有影响,当函数执行到return时候,调用next()来执行生成器则会报错,如果使用for循环遍 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- python学习日记(生成器函数进阶)
迭代器和生成器的概念 迭代器 对于list.string.tuple.dict等这些容器对象,使用for循环遍历是很方便的.在后台for语句对容器对象调用iter()函数.iter()是python内 ...
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- python中的生成器函数是如何工作的?
以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
随机推荐
- java对IO的操作
import java.io.*; public class HelloWorld { //Main method. public static void main(String[] args) { ...
- java.time.format.DateTimeFormatter
Java的日期与时间 DateTimeFormatter类是Java 8中日期时间功能里,用于解析和格式化日期时间的类,位于java.time.format包下. 1.预定义的DateTimeFo ...
- HDOJ 3473 Minimum Sum
划分树,统计每层移到左边的数的和. Minimum Sum Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- ubuntu14.04下svn版本管理系统的安装及常用命令的使用整理
ubuntu14.04下安装svn$sudo apt-get install subversion 执行这一步就安装完成了,在ubuntu先安装很方便 安装完成后,创建版本库目录,由于是本地环境,就在 ...
- 使用MAVEN手动创建web项目
问题:如下图,使用maven创建webapp项目时,默认使用maven-archetype-webapp这个archetype,由于这个archetype比较古老,有如下缺点: 1. 默认生成的项目会 ...
- 每天一个Linux命令(12)more命令
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作. 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示 ...
- Spring Cloud之Feigin客户端重构思想
应该重构接口信息(重点) toov5-parent 存放共同依赖信息 toov5-api api的只有接口没有实现 toov5-api-member toov5-api-order to ...
- Exception in thread "main" java.io.IOException: Mkdirs failed to create /var/folders/q0/1wg8sw1x0dg08cmm5m59sy8r0000gn/T/hadoop-unjar6090005653875084137/META-INF/license at org.apache.hadoop.util.Run
在使用hadoop运行jar时出现. 解决方法 zip -d Test.jar LICENSE zip -d Test.jar META-INF/LICENSE 完美解决.
- 如何搭建一个GitHub在自己的服务器上?
摘自:http://blog.csdn.net/yangzhenping/article/details/43937595
- JS中不同类型的值比较问题
我们比较数据的时候大多是以下两种情况: 3 > 4 ; "m" > "n" ; 但有时候可能会出现比较符号两侧的数据类型不相同的场景,例如 5 &g ...