python 生成器,filter的理解

2021-08-05 21:43:20 字數 1604 閱讀 8707

**1:

def nums():

i = 3

yield i

while true:

i = i + 2

yield i

def isnot(n):

return lambda x : x % n > 0

def prime():

yield 2

l = nums()

while true:

m = next(l)

yield m

g = lambda x:x%m > 0

l = filter(isnot(m), l)

group = prime()

for i in range(20):

print(next(group))

**2:

def nums():

i = 3

yield i

while true:

i = i + 2

yield i

def isnot(n):

return lambda x : x % n > 0

def prime():

yield 2

l = nums()

while true:

m = next(l)

yield m

g = lambda x:x%m > 0

l = filter(g, l)

group = prime()

for i in range(20):

print(next(group))

**設計目的為輸出素數

**1輸出符合預期:輸出素數;但是**2卻只輸出了大於1的奇數

這是為什麼?

因為在**2中   l = filter(ig, l) 中,filter函式返回的是乙個生成器(無窮數列),g中的m即為迴圈中的m。在next時才取出數m = next(l),輸出3下乙個迴圈m = next(l),l的定義為

def nums():

i = 3

yield i

while true:

i = i + 2

if g(i):

yield i

也就是

def nums():

i = 3

yield i

while true:

i = i + 2

if i%m >0

yield i

執行完m = next(l)後,此時m已經變為5了

下乙個迴圈時m = next(l),l的定義為

def nums():

i = 3

yield i

while true:

i = i + 2

if g(i):

if g(i):

yield i

此時m已經為7。

然而在**1中m傳入isnot函式中後為n,n不再變。因此符合預期

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...