生成器,用術語來說是生成器(generator)和帶yield的generator function.
但在介紹生成器之前,先來認識一下迭代器(iterator),迭代器表示的是乙個資料流,通過被 next(iterator) 呼叫獲取下乙個資料,因為我們並不知道這個資料流的長度,於是只有通過不斷地呼叫 next() 函式獲取資料,直到丟擲 stopiteration 異常。
迭代器的應用常見於迴圈的控制條件語句中,例如:
for element in
list
:pass
上面的**中的 list 會從乙個列表資料結構(列表是可迭代的,但和迭代器的區別是,沒有 next() 方法(iterable 和 iterator 的區別))轉變為迭代器(iterator),也就是說在執行for element in list: 的**時,實際上執行了 it = iter(list):**,用乙個迭代器 it 代表了原列表中資料的流。(並且,在for 中使用迭代器不會丟擲異常,原因是 for 隱藏了try…except 的細節)具體的轉換類似於這樣:
it =
iter
(list
)while
true
:try
: it.
next()
except stopiteration:
break
於是以上就是對迭代器的簡單介紹。
生成器:
函式加yield,可以參考廖教程的實現楊輝三角函式。**如下
# 每次執行到yield時暫停,然後再次呼叫時繼續。
defmyfunc()
:list=[
1]while
true
:yield
(list
)
length =
len(
list
)if length ==1:
list=[
1,1]
ls =[1
]
j =0while j <= length-2:
list
[j]+
list
[j+1])
j +=
1 1)
list
= ls
generator
# 用小括號則是生成器表示式
g =(i for i in
range(10
))# 用中括號則是列表表示式
l =[i for i in
range(10
)]
map函式返回的也是 generator, map函式把乙個函式對映在列表裡的每個值上。他的引數裡有函式,所以也就是高階函式。
並且因為返回的是乙個generator,所以常用list() 包裹上使得返回列表。
to be continued…
python學習總結
那我們先來認識一下python。python首先是一門計算機語言 是集編譯性和解釋性一身的語言。python目前在做科學計算中特別受歡迎,說到計算,我們不得不提matlab,就我個人而言,matlab,我已經接觸這麼語言4年多了,我也十分的偏愛它,可是matlab是收費的,相比而言,python是免...
Python 學習總結
資料型別 python 中的基本資料型別有 數字,字串,布林值以及空值 想使自己的 支援中文在python 的檔案頭加上 coding utf 8 python中的高階資料結構包括 list,tuple,dict和set list 有序集合,可以任意新增和刪除其中的元素 定義 list a b tu...
Python學習總結
當前使用python語言即使寫乙個for迴圈都要查資料,實屬不該。後續把學習的東西持續總結在這裡,讓自己印象更深刻一些。stata statb startc 這三行會當成乙個語句進行執行 this is a single line remark this is multiple lines rema...