python 生成器與協程


生成器在迭代中以某種方式生成下一個值並且返回和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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM