Python中裝飾器的使用

2021-07-29 06:08:44 字數 2166 閱讀 6092

在學習cs20si中遇到了裝飾器,所以這裡介紹下裝飾器decorator的使用。

主要內容依據

python中,所有的東西都是物件,乙個函式可以被賦到變數中,傳遞給另乙個函式,或者被其他函式作為返回值。

python的裝飾器就是乙個函式,接受函式作為引數,並且用另乙個函式作返回值。

import time

deftimetest

(input_func):

deftimed

(*args, **kwargs):

""" caculate time"""

start_time = time.time()

result = input_func(*args, **kwargs)

end_time = time.time()

print

"method name - , args - , kwargs - , excution time - ".format(

input_func.__name__,

args,

kwargs,

end_time - start_time

)return result

return timed

@timetest

deffoorbar

(*args, **kwargs):

time.sleep(0.3)

print

"inside foorbar"

print args, kwargs

foorbar(["hello world"], foo=2, bar=5)

將函式foorbar傳遞給了裝飾器timetest,作為引數input_func

method裝飾器可以將類的method作為類的屬性

def

method_decorator

(method):

definner

(city_instance):

if city_instance.name == "sfo":

print

"its a cool place to live in."

else:

method(city_instance)

return inner

class

city

():def

__init__

(self, name):

self.name = name

@method_decorator

defprint_test

(self):

print self.name

p1 = city("sfo")

p1.print_test()

輸出

its a cool place to live in.

p1 = city("sf")

p1.print_test()

輸出

sf

如何想要返回值為函式時,可以採用function 裝飾器,但如果希望裝飾器的返回值為乙個物件時,需要用乙個class decorator。

class

decoclass

():def

__init__

(self, f):

self.f = f

def__call__

(self):

# before f actions

print

'decorator initialised'

self.f()

print

"decorator terminated"

# after f actions

@decoclass

defkclass

():print

"class"

kclass()

輸出

decorator initialised

class

decorator terminated

python中裝飾器的使用

使用閉做包裝飾器 def filter func def test username,password if username admin and password 123456 func username,password else print 登入失敗 return test filter de...

Python中裝飾器的使用

說明 掌握python中裝飾器的使用 1.裝飾器解決什麼問題?不改變函式的結構,為函式新增功能就是我們的裝飾器 在需要新增功能的函式上面加上乙個 裝飾器即可完成對函式的功能新增。如 decorator deftest pass2.裝飾器的定義與裝飾器的本質?2.1 裝飾器的定義 deflog f d...

python中裝飾器

對修改是封閉的,對擴充套件是開放的 import time def f1 print time.time print this is a function.def f2 print this is a function.print time.time f1 def print current tim...