a = [x for x in range(10)]b= [y*2 for y in range(10)]
deff(n)
return n*n*n
c = [f(z) for z in range(10)]
列表生成器會將所有的內容載入到記憶體中,在生成大量的資料時,會占用記憶體
生成器只會生成乙個 generator object ,占用很少記憶體,只會在呼叫時才產生值。且只能按順序取值
b = (x for x in range(10))(b)print(next(b)) #
等價於 b.__next__() 等價於python2中的b.next()
print(b.__next__
())for i in
b:
(i)'''
output
at 0x000002900b1bb308>01
2345
6789
'''
① (x for x in range(10))
② yield方式
第②種**
deffoo():
print("ok"
)
yield 1
print("
fine")
yield
g =foo()
(g)#
next(g)
#aa = next(g)
#print(aa)
for i in
g:
print(i)
遇到函式中有 yield 則該函式為生成器
乙個yield是乙個生成器的生成物的結點,它會返回yield 後面的內容,然後結束,直到下乙個next的呼叫
defbar():
c = yield
0
(c)
print("
ok1"
) count = yield 1
(count)
print("
ok2"
)
yield 2g =bar()
(g)#
print(next(g))
print(g.send('
ccc')) #
typeerror: can't send non-none value to a just-started generator
print(g.send("
qqqq
"))
send()方法與next()方法類似,但可以向生成器中傳值,用於一些互動場景,但在第乙個send()前如果沒有next(),只能傳乙個send(none),否則會出現 typeerror: can't send non-none value to a just-started generator
參考部落格:python之路,day4 - python基礎4 (new版)
py西遊攻關之迭代器&生成器
什麼是迭代器?
滿足兩個條件:①有iter方法 ②有next方法
區別迭代器與可迭代物件
from collections importiterator,iterable
l = [1, 2, 3]
(isinstance(l,list))
print(isinstance(l,iterator)) #
false 不是迭代器
print(isinstance(l,iterable)) #
true 是可迭代物件
for i in
l:
print(i)
python3生成器 Python3 生成器
python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...
python3之生成器
斐波那契 fibonacci 數列列是乙個非常簡單的遞迴數列,除第乙個和第二個數外,任意乙個數都可由前兩個數相加 得到。用電腦程式輸出斐波那契數列的前 n 個數是乙個非常簡單的問題,許多初學者都可以輕易寫出如下函式 def fab max n,a,b 0,0,1 while n max print ...
python3學習筆記 生成器generator
跟著廖大學python3一段日子了,這裡簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。generator 函式 yield 簡單說,就是乙個函式,裡面用到了關鍵字yield,就成為了乙個生成器 生成器和函式的不同主要在於 每次執行,會暫時中斷在yield關鍵字...