裝飾器是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 函式的定義,這種在 執行期間動態增加功...