1. 程式人生 > 其它 >python 學習之 生成器

python 學習之 生成器

技術標籤:python學習python生成器

生成器是特殊的迭代器

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)

文章只是 學習筆記,不是專門教程 望諒解