python 學習之 生成器
阿新 • • 發佈:2021-02-15
生成器是特殊的迭代器
a=(i for i in range (10))
a
可以看出,我們產生了一個生成器
然後
next(a)
next(a)
next(a)
或者
for m in a:
print(m)
因為 for 迭代 本質是 next()
函式return 後,或者函式執行到末尾,會結束,所有函式中的資料都會刪除,再次呼叫也是重頭開始
而 關鍵字 yield ,作用相當於 return ,返回值, 但不會使函式結束,相當於讓函式暫停在那,再次呼叫時,會從下一行開始執行
注意 yield 和return 不要一起用
看下面程式碼
def test():
n=1
while True:
n=yield n
n+=1
for i in test():
print(i)
可以看出第二次進入生成器中,因為上一次的賦值操作還沒有進行 ,賦值符右邊是next()函式 返回的 None ,所有 n 被賦給了 None的值
由此我們引入 send()函式
作用相當於 傳送一個值 到yield 表示式 ,然後next()
單步除錯下面程式碼可理解
def test(): n=1 while True: n=yield n n+=1 t=test() i=next(t) print(i) i=t.send(5) print(i)
參考文章
找素數
設定開始和結束位
mylist=[] def is_primes(start): if start<2: return False elif start==2: return True else : if not start % 2==0: for current in range(3,start,2): if start%current==0: return False else: return True def get_primes(start,stop): for n in range(start,stop+1): if is_primes(n): yield n for i in get_primes(1,100): mylist.append(i) print(mylist)
文章只是 學習筆記,不是專門教程 望諒解