生成器-代码举例:()和yield
怎么自定义一个生成器:
两个方法:
1、小括号包裹表达式
2、函数中用yield返回
方法一:①小括号包裹表达式
G=(x*2 for x in range(5))
print(G)输出:<generator object ....>,3次next(G),next(G),next(G)后,输出0,2,4
方法二:②函数中用yield返回
每次调用next函数,会执行生成器代码,一直到yield返回一个数据。下次调用next函数,会从当前停止的yield之后开始执行。
(1)函数式生成器的简单形式
def G():
i = 0
yield i
i += 1
yield i
i += 1
yield i
g1=G()
print(next(g1))
print(next(g1))
print(next(g1))
说明:
使用了yield后,就不再是函数,而是生成器。
yield的作用有2点:一是记录当前运行状态(断点),二是返回值,类似return。
next()函数让生成器从断点出继续执行,即唤醒生成器。
(2)函数式生成器的循环形式
def G2():
i = 0
while i < 5:
yield i # 下次调用next函数,会从yield之后开始执行。
i += 1 g1 = G2()
print(next(g1)) # 每次调用next函数,会执行生成器的代码,一直到yield返回一个数据。
print(next(g1))
print(next(g1))
输出:
0
1
2
(3)函数式迭代器 - 斐波拉契数列的生成器
def fib_generator(n):
'''斐波那契数列生成器 :param n: 可遍历(迭代)的次数
:return: yield
'''
current = 0 # 标记迭代器位置
# 初始值
num1 = 0
num2 = 1 while current < n:
num = num1
num1, num2 = num2, num1 + num2
current += 1
yield num def main():
f = fib_generator(10)
for x in f:
print(x, end=", ") if __name__ == '__main__':
main()
输出:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
生成器-代码举例:()和yield的更多相关文章
- python中和生成器协程相关yield from之最详最强解释,一看就懂(二)
一. 从列表中yield 语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...
- Linux下c函数dlopen实现加载动态库so文件代码举例
dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...
- C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针.举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历.有这么几种迭代器如下: 迭代 ...
- jQuery概述,代码举例及最新版下载
jQuery是一个快速的,小巧的,具有强大功能的JavaScript库. 它的基本功能包括: 1)访问和操作DOM元素 2)控制页面样式(可以兼容各种浏览器) 3)对页面事件的处理 4)大量插件在页面 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)
大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...
- python 生成器与迭代器(yield 用法)
背景 首先,我不会解释这两个名词,我看过很多遍解释,可还是看不懂,还是直接看使用情景吧. 我们以佩波拉契数列为例,当我们不知道迭代器的情况下,我们写出来的代码可能是这样子的: '''这种方式计算fib ...
- JAVA 23种开发模式详解(代码举例)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
随机推荐
- mybatis通用mapper源码解析(一)
1.配置JavaBean与数据库表字段映射关系 /** * 字段转换方式 */ public enum Style { normal, //原值 camelhump, //驼峰转下划线 upperca ...
- [Tensorflow] Object Detection API - retrain mobileNet
前言 一.专注话题 重点话题 Retrain mobileNet (transfer learning). Train your own Object Detector. 这部分讲理论,下一篇讲实践. ...
- Nginx-设定允许的ip和要拒绝的ip
作用范围和配置的顺序有关系,先配置的优先级高,会覆盖和后一个配置重合的部分, 可以添加多个allow和多个deny: 1)这个配置127.0.0.1可以通过访问. allow 127.0.0.1; d ...
- mysql连接时提示错误太多的解决
mysqladmin flush-hosts -uroot -p -h127.0.0.1 -P3306 然后输入密码就可以了
- IOError: cannot open resource
在运行PIL_test.py文件的时候报错: File "PIL_test.py", line 40, in <module> font = ImageFont.tru ...
- 通过JVM 参数 实现spring 应用的二进制代码与配置分离。
原创文章,转载请注明出处 分离的好处就不说了.说下分离的思路.通过JVM 参数-D 添加 config.path 的property 到系统中.系统通过System.getProperty(confi ...
- HTTP 响应状态码
MDN https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status section 10 of RFC 2616 https://tools.ie ...
- Media Session API 为当前正在播放的视频,音频,提供元数据来自定义媒体通知
google 文档 https://developers.google.cn/web/updates/2017/02/media-session <html lang="zh-cmn- ...
- elasticsearch.yml配置文件
Elasticsearch的配置文件在config文件夹下,其中有elasticsearch.yml.logging.yml两个配置文件,其中elasticsearch.yml是用来配置Ela ...
- ML.NET速览
什么是ML.NET? ML.NET是由微软创建,为.NET开发者准备的开源机器学习框架.它是跨平台的,可以在macOS,Linux及Windows上运行. 机器学习管道 ML.NET通过管道(pipe ...