一,什麼是生成器
直接生成列表會占用太多記憶體。
python中一邊迴圈,一邊計算的機制,稱為生成器(generator)
二,建立生成器方法
1.只要把列表生成式的【】改為()
a = [d for d in range(10)]
a = (d for d in range(10))
生成器使用 next(a)獲取下乙個值,當取到最後沒有元素會報錯。for迴圈不會報錯
2.只要函式中含有yield
可以使用 next()取值
in [30]: def fib(times):
....: n = 0
....: a,b = 0,1
....: while n捕獲stopiteration錯誤,返回值包含在stopiteration的value中
g = fib(5)
in [40]: while true:
....: try:
....: x = next(g)
....: print("value:%d"%x)
....: except stopiteration as e:
....: print("生成器返回值:%s"%e.value)
....: break
....:
value:1
value:1
value:2
value:3
value:5
生成器返回值:done
三,函式
1.send 函式
執行到yield時,可以賦值給變數
c.next() 等價 c.send(none)
in [10]: def gen():
....: i = 0
....: while i<5:
....: temp = yield i
....: print(temp)
....: i+=1
in [43]: f = gen()
in [44]: f.__next__()
out[44]: 0
in [45]: f.send('haha')
haha
out[45]: 1
in [46]: f.__next__()
none
out[46]: 2
in [47]: f.send('haha')
haha
out[47]: 3
2. __next__() 方法, next() 方法
in [18]: f = gen()
in [19]: f.__next__()
out[19]: 0
in [18]: f = gen()
in [19]: f.__next__()
out[19]: 0
總結:生成器可以記住上一次返回時函式體中的位置。
特點:節約記憶體
所呼叫的引數都是上一次呼叫所保留的,而不是新建立的
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(生成器)
生成器 先從列表生成式說起 可以通過簡單的式子,生成有規律的列表 如果把 換為 會發生什麼呢?看到 x 存的不再是列表,而是乙個位址,而這個位址就是我們的生成器物件的位址 這東西有什麼用呢?當然時,節省記憶體啦 假設現在有很龐大的一組資料要處理,貌似不可能把它一次性載入記憶體再進行處理,這時候就體現...