700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python代码:生成器

python代码:生成器

时间:2018-12-25 10:50:17

相关推荐

python代码:生成器

python代码:生成器

本人的话:原书只写了生成器,没有写生成器表达式。可能是书太古老了。还需要查资料看看生成器表达式,这样有关生成器的知识才算是完整的。

#!/usr/bin/python# -*- coding: UTF-8 -*-"""@author:xiaxiaoyun@file:test02.py@time:-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# # ----# ====

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。