python代码大全和用法用量_Python生成器的使用方法和示例代码
本文是《Effect Python 编写高质量Python代码的59个有效方法》的学习笔记。主要记录生成器的使用方法和示例代码。
返回队列的函数
如果函数要产生一系列结果,那么最简单的做法就是把这些结构都放在一份列表里,然后将其返回给调用者。
def index_words(text):
"""用append方法将这些此的首字母索引添加到result列表中,并在函数结束时将其返回给调用者。"""
result = []
if text:
result.append(0)
for index, letter in enumerate(text):
if letter == ' ':
result.append(index+1)
return result
输入一些测试值,验证该函数能正常运行:
>address = 'Four score and seven years ago...'
result = index_words(address)
print(result[:3])
打印
[0, 5, 11]
生成器函数
这个函数改用生成器(generator)来写会更好。生成器是使用yield表达式的函数。调用生成器函数时,它并不会真的运行,而是会返回迭代器。每次在这个迭代器上面调用内置的next函数时,迭代器会把生成器推进到下一个yield表达式那里。生成器传给yield的每一个值,都会由迭代器返回给调用者。
def index_words_iter(text):
if text:
yield 0
for index, letter in enumerate(text):
if letter == ' ':
yield index + 1
result = list(index_words_iter(address))
注意:生成器函数返回的迭代器是有状态的,调用者不应该反复使用。
由于迭代器只能产生一轮结果。在抛出过StopIteration异常的迭代器或生成器上面继续迭代第二轮,是不会有结果的。为解决此问题,我们可以明确地使用该迭代器制作一份列表,将它的全部内容都遍历一次,并赋值到这份列表里,然后就可以在复制出来的数据列表上面多次迭代了。
为类实现生成器
下面是一个可以迭代的容器类,用来从文件中读取每行数据。
class ReadFileLines(object):
"""
可以迭代的容器类,从文件中获取数据
"""
def __init__(self, path):
self.path = path
def __iter__(self):
with open(self.path) as f:
for line in f:
yield line
多次迭代
如果想多次迭代生成器的数据,可以使用下面的函数。该函数会逐步拷贝生成器的所有数据,然后返回一个队列数据。
def normalize_defensive(datas):
"""
从生成器返回一份可以多次迭代的数据
:param datas:容器
:return: result:队列(list)
"""
# 确保调用者传进来的参数,并不是迭代器对象本身
if iter(datas) is iter(datas):
raise TypeError('Must supply a container')
# TODO
result = []
for data in datas:
# TODO
result.append(data)
return result
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
python代码大全和用法用量_Python生成器的使用方法和示例代码相关推荐
- python代码大全和用法用量_python零基础入门命令方式汇总大全,快速恶补你的Python基础...
原标题:python零基础入门命令方式汇总大全,快速恶补你的Python基础 无意中浏览到这篇来自大牛的分享,总结的很全面,我重新排版下放在这里,希望能帮助到大家.在此十分感谢原作者! 在开始之前还是 ...
- python代码大全和用法用量_Python numpy.stack()用法及代码示例
numpy.stack()函数用于沿新轴连接相同尺寸数组的序列.axis参数指定结果轴尺寸中新轴的索引.例如,如果axis = 0,它将是第一个尺寸:如果axis = -1,它将是最后的尺寸. 用法: ...
- python怎样实现界面的切换_python tkinter实现界面切换的示例代码
跳转实现思路 主程序相当于桌子: import tkinter as tk root = tk.Tk() 而不同的Frame相当于不同的桌布: face1 = tk.Frame(root) face2 ...
- python爬虫公众号音频源代码_python爬取音频下载的示例代码
抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { & ...
- python实时播放音频和录音_python实现播放音频和录音功能示例代码
python实现播放音频和录音功能示例代码 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python实现播放音频和录音功能示例代码.txt ] (友情提示:右 ...
- set.difference() 的用法(python3)_Python 集合 difference_update() 使用方法及示例
Python 集合 difference_update() 使用方法及示例 Difference_update()使用集合的差集更新集合,并调用difference_update()方法. 如果A和B ...
- python代码大全心形盒子简单_Python: 有趣的心形打印代码
python 3+, 命令行和文件都可以 importtimeimportosimportmath out= [([(time.sleep(a), print(""+i,end=& ...
- Python pandas 保存Excel自动调整列宽的方法及示例代码
本文主要介绍Python中,使用pandas.ExcelWriter保存Excel文件数据时,自动判断调整列的宽度方法,以及相关的示例代码. 原文地址:Python pandas 保存Excel自动调 ...
- python学习-日志(logging的定义、参数、format、示例代码、创建logging对象、设置Handler)
文章目录 logging介绍 logging.basicConfig定义 logging.basicConfig参数说明 logging.basicConfig日志等级说明 logging.basic ...
最新文章
- 2021年春季学期-信号与系统-第八次作业参考答案-第七小题
- UPDATE ORACLE(9i OR 10G) USER'S PASSWORD AND GET ORACLE VERSION MESSAGE
- SVN 常用操作命令 使用笔记
- 图像分类简单介绍-转
- C++:cin.getline
- 2019 牛客多校第一场 E ABBA
- oracle是否启用dataguard,启动和关闭data guard的步骤
- java 判断文件是否打开过_【后端开发】Java中如何判断文件是否被隐藏?(代码示例)...
- 没有找到 AUTOBACKUP
- 开源视频平台:Kaltura
- python字母表顺序函数_python获取字母在字母表对应位置的几种方法及性能对比较...
- 《薛兆丰的经济学课》课程总结4--相互依赖
- 经常用电脑辐射大怎么办?这5个习惯可以防辐射
- 从程序员到项目经理(21):谁都需要成就感
- 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践
- python 画隐函数图像 画三维显函数图像
- pandas笔记1 --pandas处理mat表格文件
- uniapp组件-uni-icons 图标
- 波形发生器设计(频率、占空比、幅值可调)
- 计算机无法识别苹果6手机软件,电脑里安装的itunes不能识别我的苹果6sp… - Apple 社区...