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)
文章只是 學習筆記,不是專門教程 望諒解
