1.無引數無返回值
def
setfunc
(func)
:def()
:print
("start"
) func(
)print
("end"
)@setfunc # setfunc(show)
defshow()
:print
("show"
)show(
)# start
# show
# end
2.無參有返回值
def
setfunc
(func)
:def()
:print
("start"
)return func(
)print
("end"
)# 遇到retur,此句不再執行
@setfunc
defshow()
:return
"show"
print
(show())
# start
# show
3.有引數無返回值
def
setfunc
(func)
:def
(s):
print
("start"
) func(s)
print
("end"
)@setfunc
defshow
(s):
print
("hello %s"
% s)
show(
"city college"
)# start
# hello city college
# end
4.有引數有返回值
def
setfunc
(func)
:def
(x,y)
:print
("start"
)return func(x,y)
print
("end"
)# 遇到retur,此句不再執行
@setfunc
defmyadd
(x,y)
:return x+y
print
(myadd(3,
3))# start
# 6
根據被裝飾函式的定義不同,分出了四種形式。
能不能實現一種,適用於任何形式函式定義的裝飾器?
通過可變引數(*args/**args)進行傳參。
def
setfunc
(func)
:def
(*args,
**kwargs)
:print()
return func(
*args,
**kwargs)
@setfunc
deffunc
(name,age,job =
"it"):
print
(name,age,job)
func(
"tom",18
,"student"
)@setfunc
defdemo
(a,b,
*c,**d)
:print
((a,b)
)print
(c)print
(d)demo(
"city"
,"college"
,1999,1
,1,school =
"zucc"
)# tom 18 student
# ('city', 'college')
# (1999, 1, 1)
#
乙個函式在使用時,通過乙個裝飾器來拓展,可能並不能達到預期。
乙個函式被多個裝飾器所裝飾。
# 裝飾器1
defsetfunc1
(func)
:def
(*args,
**kwargs)
:print
(.center(40,
'-')
) func(
*args,
**kwargs)
print
(.center(40,
'-')
)# 裝飾器2
defsetfunc2
(func)
:def
(*args,
**kwargs)
:print
(.center(40,
'-')
) func(
*args,
**kwargs)
print
(.center(40,
'-')
)@setfunc1
@setfunc2
defshow
(*args,
**kwargs)
:print
("show run"
)show(
)# show run
函式可以像普通變數一樣,作為函式的引數或者返回值進行傳遞。
函式的內部可以定義另外乙個函式。目的,隱藏函式功能的實現。
閉包實際上也是函式定義的一種形式。
閉包定義的規則,在外部函式內定義乙個內部函式,內部函式使用外部函式的變數,並返回內部函式的引用。
python中,裝飾器就是用閉包來實現的。
裝飾器的作用,不改變現有函式的基礎上,為函式增加功能。
裝飾器的使用,通過@裝飾器函式名
的形式來給已有函式進行裝飾,新增功能。
裝飾器四種形式,根據引數的不同以及返回值的不同。
萬能裝飾器,通過可變引數(*args/**kwargs)來實現。
乙個裝飾器可以為多個函式提供裝飾器功能。
乙個函式也可以被多個裝飾器所裝飾。
通過類實現裝飾器,重寫__init__
和__call__
函式。
類裝飾器在裝飾函式後,原來的引用不再是函式,而是裝飾類的物件。
7 31裝飾器的幾種形式
1.無引數無返回值 def setfunc func def print start func print end setfunc defshow print show show setfunc show start show end2.無引數有返回值 def setfunc func def pr...
裝飾器的幾種形式 萬能裝飾器
1.無參無返回值 def setfunc func def print start func print end setfunc defshow print show show 在不改變原函式呼叫釋放下 新增了功能 start show end2.無參有返回值 def setfunc func de...
的幾種形式 軸承知識 散熱器的軸承形式有幾種?
sulli小蘇 今天詳細介紹下散熱器的軸承有幾種型別?對於一款散熱器來講,軸承是直接決定著一款散熱器的好壞的重要因素。對於一款散熱器來講,軸承到底起到哪些厲害關鍵作用呢?1.不同型別的軸承會影響到一款風扇的使用壽命 2.而且對整個風扇的噪音大小也起到至關重要的作用。也就說,軸承直接決定著一款散熱器的...