Python 裝飾器 迭代器 生成器理解及應用

2021-10-25 00:09:48 字數 1902 閱讀 6223

裝飾器是python的乙個函式,它可以在不改動函式的前提下增加額外的功能,其返回值是函式物件。

舉個例子:

有兩個函式,我想在hi函式前先列印hello, world!

def

hello

(function)

:def

hello()

:print

("hello, world!"

)return function

return hello(

)@hello # 這裡就是裝飾器的呼叫

defhi()

:print

("hi, girl!"

)# 直接呼叫hi函式便可以滿足需求

hi()

輸出結果:

hello, world!

hi, girl!

迭代器它有自己的類方法,分別是iter和next, iter是返回例項物件,next是獲取迭代物件的資料。簡單來說,迭代迴圈遍歷的意思,

所以對於string(字串)、list(列表)、dict(字典)、tuple(元組)這些資料型別都是可迭代物件。

舉個例子:

a_tuple =

("asf"

,"qwe"

,"zxc"

,"rty"

,"dfg"

,"vbn"

)b_iter =

iter

(a_tuple)

print

(next

(b_iter)

)print

(next

(b_iter)

)print

(next

(b_iter)

)print

(next

(b_iter)

)print

(next

(b_iter)

)print

(next

(b_iter)

)

等同於下面for迴圈:

for i in a_tuple:

print

(i)

輸出結果:

asf

qwezxc

rtydfg

vbn

注意:next從iter中獲取下個資料並記錄當前位置,如果無法獲取下個資料則會觸發stoptrerator異常,結束迭代。

生成器屬於迭代器,它是更簡單的的迭代工具,在使用的時候,只需要在返回資料的時候使用yield函式即可。

舉個例子:

找出100以內的質數。

list1 =

deffun()

:for i in

range(2

,100):

for j in

range(2

, i)

:if i%j ==0:

break

if i%j !=0:

print

(i)# print([1, 2] + list(set(list1))) # 需要列印的地方換成yield

yield[1

,2]+

list

(set

(list1)

)a = fun(

)print

(a)

輸出結果:

>

Python生成器 迭代器 裝飾器

python生成器 迭代器 裝飾器 最簡單的生成器 g x x for x in range 10 for i in g print i函式方法實現稍複雜的生成器 def fib max n,a,b 0,1,1 while nyield b a,b b,a b n 1 for n in fib 6 ...

python 裝飾器,生成器,迭代器

示例1 無參無返回值 def shuai func 示例2 帶參函式的裝飾器 帶參函式的裝飾器 示例3 帶參有返回值的裝飾器 def zhuangshiqi func 資料量非常小,記憶體占用不大 l i for i in range 10 資料量特別大時,會造成記憶體占用突然增大 l2 i for...

Python裝飾器,迭代器,生成器

1.python裝飾器 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。所有函式都有乙個 name 屬性,這樣我們就可以那到函式名。現在,假設我們要增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功...