7 31裝飾器的幾種形式

2021-09-25 18:14:03 字數 3543 閱讀 5774

1.無引數無返回值

def

setfunc

(func)

:def()

:print

("start"

) func(

)print

("end"

)# @setfunc

defshow()

:print

("show"

)# show()

setfunc(show)()

start

show

end

2.無引數有返回值

def

setfunc

(func)

:def()

:print

("start"

)return func(

)# 遇到return,後面不再執行

print

("end"

)@setfunc

defshow()

:return

"show"

print

(show())

# setfunc(show)()

start

show

3.有引數無返回值

def

setfunc

(func)

:def

(s):

print

("start"

) func(s)

# 遇到return,後面不再執行

print

("end"

)@setfunc

defshow

(s):

print

("hello %s"

% s)

## print(show())

show(

"city college"

)# setfunc(show)()

start

hello city college

end

4.有引數有返回值

def

setfunc

(func)

:def

(x, y)

:print

("start"

)return func(x, y)

# 遇到return,後面不再執行

print

("end"

)# @setfunc

# def show(s):

# print("hello %s" % s)##

# ## # print(show())

# show("city college")

## setfunc(show)()

@setfunc

defmyadd

(x, y)

:return x + y

print

(myadd(3,

3))start

6

根據被裝飾函式的定義不同,分出了四種形式。

能不能實現一種,適用於任何形式函式定義的裝飾器

通過可變引數來接收不同的引數型別

def

setfunc

(func)

:def

(*args,

**kwargs)

:print()

return func(

*args,

**kwargs)

@setfunc

deffunc

(name, age, job=

"it"):

print

(name, age, job)

func(

"tom",18

)@setfunc

defdemo

(a, b,

*c,**d)

:print

((a, b)

)print

(c)print

(d)demo(

"city"

,"college"

,1997,9

,15, school=

"zhejiang university"

)tom 18 it

('city'

,'college')(

1997,9

,15)

函式被多個裝飾器所裝飾

乙個函式在使用時,通過乙個裝飾器來拓展,可能並不能達到預期。

乙個函式被多個裝飾器所修飾。

# 裝飾器1

defsetfunc1

(func)

:def

(*args,

**kwargs)

:print()

func(

*args,

**kwargs)

print()

# 裝飾器2

defsetfunc2

(func)

:def

(*args,

**kwargs)

:print()

func(

*args,

**kwargs)

print()

@setfunc1

@setfunc2

defshow

(*args,

**kwargs)

:print

("show run"

.center(40,

'-')

)show(

)# 從下往上去裝飾(執行過程來看)

# 從內往外去裝飾(從函式的呼叫來看)--

----

----

----

--show run---

----

----

----

-

總結:

1.函式可以像普通變數一樣,作為函式的引數或者返回值進行傳遞。

2.函式的內部可以定義另外乙個函式。目的隱藏函式功能的實現。

3.閉包實際上也是函式定義的一種形式。

4.閉包定義的規則,在外部函式內定義乙個內部函式,內部函式使用外部函式的變數,並返回內部函式的引用。

5.python中,裝飾器就是用閉包來實現的。

6.裝飾器的作用,不改變現有函式的基礎上,為函式增加功能。

7.裝飾器的使用,通過@裝飾名函式名的形式來給已有函式進行裝飾,新增功能。

8.裝飾器的四種形式,根據引數的不同以及返回值的不同

9.萬能裝飾器,可通過可變引數(*args/**kwargs)來實現。

10.乙個裝飾器可以為多個函式提供裝飾功能

11.乙個函式也可以被多個裝飾器所裝飾。(了解)

12.通過類實現裝飾器,重寫__init____call__函式。

13.類裝飾器在裝飾函式後,原來的引用不再是函式,而是裝飾類的物件。

裝飾器的幾種形式

1.無引數無返回值 def setfunc func def print start func print end setfunc setfunc show defshow print show show start show end2.無參有返回值 def setfunc func def pri...

裝飾器的幾種形式 萬能裝飾器

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.而且對整個風扇的噪音大小也起到至關重要的作用。也就說,軸承直接決定著一款散熱器的...