Learning Python 019 生成器(Generators)和 yield

Python3 解决编码问题: UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 原博文链接:http://www.aobosir.com/blog/2016/12/08/python3-UnicodeEncodeError-gbk-codec-can’t-encode-character-xa9/开发环境 Python第三方库:lxml、Twisted、pywin32、scrapy Python 版本:python-3.5.0-amd64 PyCharm软件版本:pycharm 阅读详情

  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python 2.7.10 和 python 3.5.0

知识点:生成器

生成器只能用于迭代操作。

一个函数,其中带 yield 关键字的代码,它不会执行,只是记下有这个操作;其他代码正常的执行。而被记下的这些操作会像队列一样存起来,这个“队列”就是 生成器,并且会类似于return一样返回。

一个函数的代码里面有 yield 关键字,那么这个函数就是一个制造生成器的函数。

生成器是Python中的高级特性。我之前学习过,还写了一个博客:Learning Python 011 高级特性 2


Python3 例子

>>> def f():
...     yield 1
...     yield 2
...     yield 3
...
>>> g = f()
>>> g
<generator object f at 0x0000023B63151258>
>>> type(g)
<class 'generator'>
>>> next(g)
1
>>> next(g)
2
>>> next(g)
3
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> list(g)
[]
>>> g = f()
>>> list(g)
[1, 2, 3]
>>> list(g)
[]
>>>

>>> def counter(num):
...     print('Run to the ' + str(num) + ' yield')
...
>>> def f():
...     print('start!')
...     yield counter(1)
...     yield counter(2)
...     yield counter(3)
...     print('Done!')
...
>>> g = f()
>>> g
<generator object f at 0x000001D4843E1258>
>>> next(g)
start!
Run to the 1 yield
>>> next(g)
Run to the 2 yield
>>> next(g)
Run to the 3 yield
>>> next(g)
Done!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> list(g)
[]
>>> g = f()
>>> list(g)
start!
Run to the 1 yield
Run to the 2 yield
Run to the 3 yield
Done!
[None, None, None]
>>>

Python2 实例

生成器在 python2 的用法和在python3中的用法一样,唯一的区别是:

  • python2 中 可以使用next(g) 或者 g.next()。 这样两个等价
  • python3 中 只有next(g),没有g.next()。

参考网站:生成器


请访问: http://www.aobosir.com/

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

相关推荐

保姆级教程:在Windows上用Docker Desktop一键部署Dify 1.0.1(附国内镜像加速)

本文提供在Windows系统上使用Docker Desktop快速部署Dify 1.0.1的详细教程,包括环境准备、国内镜像加速配置、Dify容器部署实战及常见问题解决方案。特别针对国内用户优化,确保快速完成部署并提升开发效率。

weixin_33738555的博客 282

Python 解决 :NameError: name 'reload' is not defined 问题

Python 解决 :NameError: name 'reload' is not defined 问题解决:NameError: name 'reload' is not defined 问题对于 Python 2.X:import sys reload(sys) sys.setdefaultencoding("utf-8")对于 <= Python 3.3:import imp imp.rel

AoboSir.com 15万+

STM32与HT7038的高精度电能计量系统设计与实现

本文详细介绍了基于STM32微控制器与HT7038三相电能计量芯片的高精度电能计量系统设计与实现。文章从项目选型出发,深入剖析了硬件电路设计、SPI驱动开发、芯片校准及系统集成等关键环节,为智能电表、能源监控等应用提供了高性价比且稳定的国产化解决方案。

pytorch8learner的博客 389

Python 安装 第三方库的安装技巧

Python 安装 第三方库的安装技巧Windows 10 64位。 Python 3.5.0:1. 使用 pip 命令行工具在线下载你需要的第三方库 2. 手动下载 第三方库,再使用 `pip` 命令安装 Could not find a version that satisfies the requirement opencv (from versions: ) No matching distr

AoboSir.com 12万+

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 471

在PyCharm 软件中设置你的项目 使用的Python版本

在PyCharm 软件中设置你的项目 使用的Python版本python2 和 python3 有很大的不同,使用python2 编写的程序,如果使用python3 就运行不了;使用python3编写的程序,如果使用python2一样也是不用运行。Q: 所以,如何在pyCharm 软件中,为你的项目设置 python 的版本?A: 当前项目使用的是 python2 :我希望将其设置为 python

AoboSir.com 7万+

TouchSocket TcpService:构建高性能Tcp服务的终极利器

/ 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务?

若汝棋茗 的博客 1461

设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本

设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本python2 和 python3 有很大的不同,使用python2 编写的程序,如果使用python3 就运行不了;使用python3编写的程序,如果使用python2一样也是不用运行。我的电脑中, python2 和 python3 这两个版本都有。并且 python3 添加到了环境变量里面,而 pyt

AoboSir.com 6万+

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7222

【Matlab】如何使用Simulink进行电池建模和SOC预估

“通过Simulink电池建模进行SOC预估,其实挺容易!” 1 声明 本文只描述一般性电池建模方法,文中出现的电池相关数据来自一些论文或者外文文献,对数据的真实性不做任何保证。 本文参考了不少国内高校的硕士论文和外文文献,所以本篇文章只作为学术性交流,未经...

wanff1204的博客 2万+

树莓派 Learning 003 --- GPIO 001 --- 点亮LED

树莓派 Learning 003 — GPIO 001 — 点亮LED 树莓派 Learning 003 GPIO 001 点亮LED 编写一个让 LED 闪烁的 Python 脚本程序 讲解 blinkledpy 代码 在 Python 交互式终端中控制 LED 点亮和熄灭

AoboSir.com 3万+

L2CAP 面向连接信道(CoC)在 BLE 中的应用:建立、流控与数据传输

L2CAP(逻辑链路控制与适配协议)是蓝牙协议栈中的核心层,位于基带层之上,为上层协议提供数据传输服务。在低功耗蓝牙(BLE)中,L2CAP面向连接信道(Connection-Oriented Channel, CoC) 是实现可靠数据传输的关键机制,广泛应用于健康监测、智能家居、工业控制等领域。

byte轻骑兵的技术小窝 3634

解决问题: pywin32 安装后出现 import win32api ImportError DLL load failed

执行 scrapy bench 命令时 出现错误。(之前安装了pywin32库)Traceback (most recent call last): File "c:\users\aobo\appdata\local\programs\python\python35\lib\site-packages\twisted\internet\defer.py", line 1260, in _inli

AoboSir.com 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码

通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3一 . 前言通过之前两节(

AoboSir.com 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题

解决下载(或叫:爬取)到的网页乱码问题使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3上一节,我介绍了如何下载网页。这样节我们来讲:如果我们下载一个带有中文的网站

AoboSir.com 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页

通过网站地图爬取目标站点的所有网页使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3一 . 前言通过前两节(爬取一个网页 的网络爬虫 和 解决爬取到的网页显示时乱

AoboSir.com 2万+

Python 网络爬虫 010 (高级功能) 解析 robots.txt 文件

解析 robots.txt 文件使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3一 . 前言之前,我在网络爬虫科普的时候,介绍过robots.txt 文件,如果你

AoboSir.com 2万+

ROS Learning-030 (提高篇-008 A Mobile Base-06) 控制移动平台 --- (Python)odom导航的例子:移动一个方块路径

ROS 提高篇 之 A Mobile Base-06 — 控制移动平台 — (Python)再次使用odom导航的一个例子:移动一个方块路径我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 注意: 1 . ROS 提高篇这个专栏的教学有门槛。 2 . 如果你没有学习前面的教程,请

AoboSir.com 2万+

ROS Learning-028 (提高篇-006 A Mobile Base-04) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(不精确的制定目标位置)

ROS 提高篇 之 A Mobile Base-04 — 控制移动平台 — (Python编程)控制虚拟机器人的移动(不精确的制定目标位置)我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 注意: 1 . ROS 提高篇这个专栏的教学有门槛。 2 . 如果你没有学习前面的教程,请

AoboSir.com 2万+

Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫

如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3一 . 简介编写网络爬虫的第一步就是下载网页,这个过程叫做

AoboSir.com 2万+

Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识

网站站点的背景调研1. 检查 robots.txt网站都会定义robots.txt 文件,这个文件就是给 网络爬虫 来了解爬取该网站时存在哪些限制。当然了,这个限制仅仅只是一个建议,你可以遵守,也可以不遵守。但对于一个良好的网民来说,最好还是遵守robots.txt 文件里面的限制。Q: 如何查看这个 robots.txt 文件? A: 你只需要在 目标网站站点域名 后面加上 robots.txt

AoboSir.com 2万+

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 412

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 208
上一篇: Learning Python 018 Python2 和 Python3 中 range()函数的使用
下一篇: Learning Python 020 pass 的用法
AoboSir
博客等级 码龄10年 996粉丝 285原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值