首页 > 代码库 > ? Generators生成器
? Generators生成器
生成器对象通过它的next方法返回一个值,直到触发StopIteration异常.
你需要做的只是像创建一个函数一样去创建一个生成器,它包含一个yield语句,pyth
on会认yield并将它标记为生成器。当函数执行到执行到yield语句时,它会像return语句一样返回一个值,唯一不同的是,python解释器会返回一个next函数的栈(stack)指引.
创建一个生成器:
1 def mygenerator(): 2 yield 1 3 yield 2 4 yield ‘a‘ 5 6 """ 7 >>> mygenerator() 8 <generator object mygenerator at 0x00B18EB8> 9 >>> g = mygenerator()10 >>> next(g)11 112 >>> next(g)13 214 >>> next(g)15 ‘a‘16 >>> next(g)17 18 Traceback (most recent call last):19 File "<pyshell#5>", line 1, in <module>20 next(g)21 StopIteration22 >>> 23 ""
1 >>> x = mygenerator() 2 >>> x.next() 3 1 4 >>> x.next() 5 2 6 >>> x.next() 7 ‘a‘ 8 >>> x.next 9 <method-wrapper ‘next‘ of generator object at 0x012EF288>10 >>> x.next()11 12 Traceback (most recent call last):13 File "<pyshell#12>", line 1, in <module>14 x.next()15 StopIteration16 >>>
我们来写一个函数shorten带一个字符列表参数,返回这个列表的缩写值。长度由元音的数量决定。比如loremipsum有四个元音(o,e,i,u)那么下一个返回的缩写将会是前面四个,dolorist-->dolo,这个有两个元音,下一个将返回前面两个字符
1 #coding=utf-8 2 def shorten(string_list): 3 length = len(string_list[0]) 4 5 for s in string_list: 6 length = yield s[:length] 7 8 mystringlist = [‘loremipsum‘, ‘dolorist‘, ‘ametfoobar‘] 9 shortstringlist = shorten(mystringlist)10 result = []11 12 try:13 s = next(shortstringlist)14 result.append(s)15 16 while True:17 number_of_vovels = len(filter(lambda letter: letter in ‘aeiou‘,s))18 19 #下一个缩写的字符20 #由上一个的字符串的元音多少决定21 s = shortstringlist.send(number_of_vovels)22 result.append(s)23 24 except StopIteration:25 pass26 27 28 """29 >>> result30 [‘loremipsum‘, ‘dolo‘, ‘am‘]31 >>> 32 """
send()方法允许我们传一个值给生成器
? Generators生成器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。