? 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 1 12 >>> next(g) 13 2 14 >>> 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 StopIteration 22 >>> 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 StopIteration 16 >>>?
?
我們來寫一個函數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 pass 26 27 28 """ 29 >>> result 30 ['loremipsum', 'dolo', 'am'] 31 >>> 32 """send()方法允許我們傳一個值給生成器
?
轉載于:https://www.cnblogs.com/jypwn/p/4032056.html
總結
以上是生活随笔為你收集整理的? Generators生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP 协议(详解)
- 下一篇: NOIP2018划水记