裝飾器基礎

2021-10-07 11:10:21 字數 2840 閱讀 8488

1.裝飾器的作用

在不修改函式的情況下給函式新增新的功能

2.什麼是裝飾器

裝飾器的本質就是乙個函式(這個函式是乙個實參高階函式也是返回值高階函式)

無參裝飾器的寫法:

def 函式名1(函式名2):

def 函式名3(*args, **kwargs):

新功能**

返回值 = 函式名2(*args, **kwargs)

return 返回值

return 函式名3

說明:

函式名1 - 裝飾器名字,命名的時候和這個裝飾器要新增的功能進行關聯

函式名2 - 隨便命名,指向被新增功能的函式; 可以命名成 fn

函式名3 - 隨便命名,在原函式上新增完新的功能以後產生的新的函式

新功能** - 實現新加的功能的**

寫乙個裝飾器,在函式開始執行前列印』函式開始』

def

start_function

(fn)

:def

new_fn

(*args,

**kwargs)

:print

('函式開始'

) result = fn(

*args,

**kwargs)

return result

return new_fn

@start_function

defyt_sum

(num1, num2)

:print

(num1 + num2)

@start_function

defprint_star

(n):

print

('*'

* n)

@start_function

deffactorial

(n):

sum1 =

1for x in

range(1

, n +1)

: sum1 *= x

return sum1

yt_sum(10,

20)print_star(8)

yt_sum(

100,

200)

print

(factorial(5)

)

函式開始

30#練習1:寫乙個裝飾器將返回值是字串的函式,返回值中所有的小寫字母變成大寫字母。

def

yt_upper

(fn)

:# fn = str_func

defnew_fn

(*args,

**kwargs)

: result = fn(

*args,

**kwargs)

iftype

(result)

==str

:return result.upper(

)# new_result = ''

# for x in result:

# if 'a' <= x <= 'x':

# new_result += chr(ord(x)-32)

# else:

# new_result += x

# return new_result

else

:return result

return new_fn

@yt_upper

defstr_func()

:return

'abc'

@yt_upper

defstr_func()

:return

'abc'

相當於:

defstr_func()

:return

'abc'

str_func = yt_upper(str_func)

# str_func = new_fn

@yt_upper

defnum_func()

:return

100print

(str_func())

print

(num_func(

))

#補充:定義函式的時候*args和**kwargs同時存在的意義 - 不定引數的函式在呼叫的時候既可以使用位置引數也可以使用關鍵字引數

def

func1

(*args,

**kwargs)

:pass

func1(20,

90,90)

func1(a=

20, b=9)

func1(1,

3,4, a=

3, b=

5, c=90)

deffunc3

(x, y, z)

:print

(f'x:, y:, z:'

)def

func2

(*args,

**kwargs)

:# args = (10, 20, 30)

# kwargs = {}

func3(

*args,

**kwargs)

# func3(10, 20, 30) func3(*(10, 20, 30)) -> func3(10, 20, 30)

func2(10,

20,30)

func3(x=

20, y=

90, z=

300)

python基礎 裝飾器

裝飾器本質就是函式,功能是為其他函式新增附加功能。原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 import time 定義乙個裝飾器計算函式執行時間 def timer func start time time.time res fun...

python基礎 裝飾器

裝飾器形成的過程 最簡單的裝飾器 有返回值的 有乙個引數 萬能引數 裝飾器的作用 原則 開放封閉原則 語法糖 裝飾器的固定模式 import time print time.time 獲取當前時間 time.sleep 10 讓程式在執行到這個位置的時候停一會兒 def timmer f 裝飾器函式...

Python基礎 裝飾器

裝飾器是程式開發中經常會用到的乙個功能,程式開發的基礎知識,用好了裝飾器,開發效率如虎添翼,所以這也是python面試中必問的問題,但對於好多初次接觸這個知識的人來講,這個功能有點繞,這個都不會,別跟人家說你會python,看了下面的文章,保證你學會裝飾器。裝飾器 decorator 首先我們需要知...