python代码:生成器
python代码:生成器
本人的话:原书只写了生成器,没有写生成器表达式。可能是书太古老了。还需要查资料看看生成器表达式,这样有关生成器的知识才算是完整的。
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:xiaxiaoyun @file:test02.py @time:2022-04-03 21:04 """ """ 书《Python核心编程(第二版).pdf》,作者:Wesley J. Chun协同程序是可以运行的独立函数调用,可以暂停或者挂起,并从程序离开的地方继续或者重新开始。在有调用者和(被调用的)协同程序也有通信。 举例来说,当协同程序暂停的时候,我们能从其中获得一个中间的返回值,当调用回到程序中时,能够传入额外或者改变了的参数,但仍能够从我们上次离开的地方继续,并且所有状态完整。挂起返回出中间值并多次继续的协同程序被称为生成器。 从语法上讲,生成器是一个带yield语句的函数。 一个生成器能暂停执行并返回一个中间的结果(那就是yield语句的功能),返回一个值给调用者并暂停执行。当生成器的__next__()方法被调用的时候,它会准确地从离开地方继续(当它返回[一个值以及]控制给调用者时)。 当到达一个真正的返回或者函数结束没有更多的值返回(当调用__next__()),一个StopIteration异常就会抛出。 Python的for循环有next()调用和对StopIteration的处理。 """ # # 例子1:一个简单的生成器 # def simpleGen(): # yield 1 # yield '2 --> punch!' # # myG = simpleGen() # print(myG.__next__()) # 1 # print(myG.__next__()) # 2 --> punch! # print(myG.__next__()) # 程序出错,抛出异常StopIteration # # ----# # 例子2:使用for循环 # # Python的for循环有next()调用和对StopIteration的处理。 # def simpleGen(): # yield 1 # yield '2 --> punch!' # # for eachItem in simpleGen(): # print(eachItem) # """ # Output: # 1 # 2 --> punch! # """ # # ----# # 例子3:创建一个带序列并从那个序列中返回一个随机元素的随机迭代器。 # from random import randint # # 解释:def randint(self, a, b): # Return random integer in range [a, b], including both end points. # # def randGen(aList): # while len(aList) > 0: # yield aList.pop(randint(0, len(aList) - 1)) # 每个返回的元素将从那个队列中消失,像一个list.pop()和random.choice()的结合的归类。 # # for item in randGen(['rock', 'paper', 'scissors']): # print(item) # """ # Output: # rock # scissors # paper # """# # 例子4:生成器在闭包中的运用 # def counter(start_at=0): # count = start_at # while True: # val = (yield count) # if val is not None: # count = val # else: # count += 1 # """ # 生成器带有一个初始化的值,对每次对生成器__next__()调用以1累加计数。 # 用户也可以选择重置这个值,如果他们非常想要用新的值来调用send()不是调用next()。 # 这个生成器是永远运行的,所以如果你想要终结它,调用close()方法。 # """ # # 调用 # count = counter(5) # print(count.__next__()) # 5 # print(count.__next__()) # 6 # print(count.send(9)) # 9 # print(count.__next__()) # 10 # count.close() # print(count.__next__()) # 程序抛出异常StopIteration # # ---- # ====
python代码:生成器相关推荐
- python自动生成鸡汤文_20行python代码实现鸡汤智能生成器
"Don't think of the overwhelming majority of the impossible." "不要去想不可能之事" " ...
- append函数_高质量python代码:考虑用生成器来改写直接返回列表的函数
写在前面:内容参照自<Effective Python>,其实你完全可以直接去看书,什么?你不想自己看书,那么你也可以关注我,我会不定期从书中挑出常用到的有效方法分享出来,这样你就可以一边 ...
- python代码大全和用法用量_Python生成器的使用方法和示例代码
本文是<Effect Python 编写高质量Python代码的59个有效方法>的学习笔记.主要记录生成器的使用方法和示例代码. 返回队列的函数 如果函数要产生一系列结果,那么最简单的做法 ...
- python 按钮更改输入框的值_利用 50 行 Python 代码构建一个在线文本生成器!
本指南将引导你学习构建一个自动完成任意输入文本的Web应用程序. 作者 | Dev Sharma译者 | 苏本如,责编 | 郭芮出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中,我 ...
- python代码图片头像_GitHub - nonPointer/avatar_generator: 头像图片生成器 Python代码
avatar_generator 哈希头像图片生成器 Python代码 Identicon 在很多大型IT网站上可以见到,比如 Github, Sourceforge, Stackoveflow 等等 ...
- github 头像生成 java_GitHub - haoziiy/avatar_generator: 头像图片生成器 Python代码
avatar_generator 哈希头像图片生成器 Python代码 Identicon 在很多大型IT网站上可以见到,比如 Github, Sourceforge, Stackoveflow 等等 ...
- python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!
我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...
- 自动检索、修复Python代码bug,微软推出DeepDebug
视学算法报道 机器之心编辑部 还在为不断的 debug 代码烦恼吗? 本地化 Bug 并修复程序是软件开发过程中的重要任务.在本篇论文中,来自微软 Cloud+AI 部门的研究者介绍了 DeepDeb ...
- 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range
本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第10条:尽量用enumerate取代range,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章 ...
最新文章
- Https的底层原理
- 学习JS的心路历程-参数传递方式(上)
- C++实用技巧(二)
- java 21 - 6 字符缓冲流的特殊方法以及该方法高效复制文件
- IBASE view WD_DESTROY - ON_NEW_FOCUS
- 【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.cpp
- 汽车在转型!福特中国的架构实践
- 【创建型】Prototype模式
- C语言经典面试题100道(校对详解版)
- CMOS模拟集成电路设计学习笔记
- 坚持写博客对我们有什么好处
- 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第四节 窗体的移动
- 小米路由器 mini 重新刷回官方固件
- 爱快iKuai 安装成功后运行提示程序运行中解决办法
- 《Spring实战》读书笔记-第6章 渲染Web视图
- 创建型设计模式(待更新)
- Python3---站在大佬肩膀写爬虫-爬取网易云音乐热歌榜歌曲热评(精彩评论)
- js/jquery(2)
- 《先进PID控制 MATLAB仿真 第2版 刘金琨等编》【shallow】
- 中国有机淀粉市场趋势报告、技术动态创新及市场预测