生成器在迭代中以某種方式生成下一個值並且返回和next()調用一樣的東西。
掛起返回出中間值並多次繼續的協同程序被稱作生成器。
語法上講,生成器是一個帶yield語句的函數。一個函數或者子程序只返回一次,但一個生成器能暫停執行並返回一個中間的結果。
隨機數生成器實例:
from random import randint def Mygen(alist): while len(alist) > 0: c = randint(0, len(alist)-1) yield alist.pop(c) a = ["ss","dd","gg"] for i in Mygen(a): print i #output #dd #gg #ss
協程:
使用send()為協程發送某個值之前,協程會暫時的中止,此時,協程中的yield表達式將會返回這個值,而接下來的語句將會處理它。處理直到遇到下一個yield表達式才會結束,也就是函數暫時中止的地方。close()生成器則退出。
def Count(n): count = n while True: val = (yield count) if val is not None: count = val else: count += 1 a = Count(10) print a.next() print a.next() a.send(5) print a.next() print a.next() a.close() print a.next() #/usr/bin/python /Users/li/PycharmProjects/Nowcoder_Practice/tmp.py #10 #Traceback (most recent call last): #11 #6 #7 # File "/Users/li/PycharmProjects/Nowcoder_Practice/tmp.py", line 37, in <module> # print a.next() #StopIteration #Process finished with exit code 1