定義乙個裝飾器
def
decorator
(func)
:def
(*arg,
**kwargs)
:print
("before"
) ret = func(
*arg,
**kwargs)
print
("after"
)return ret
使用示例
# -*- coding: utf-8 -*-
# 作用於普通方法
@decorator
deffoo
(name)
:print
('my name is:'
, name)
class
foo(
object):
# 作用於例項方法
@decorator
deffoo(self, name)
:print
('my name is:'
, name)
# 作用於類方法
@classmethod
@decorator
defclass_foo
(cls, name)
:print
('my name is:'
, name)
# 作用於靜態方法
@staticmethod
@decorator
defstatic_foo
(name)
:print
('my name is:'
, name)
if __name__ ==
'__main__'
: foo(
'tom'
) foo(
).foo(
'tom'
) foo.class_foo(
'tom'
) foo.static_foo(
'tom'
)"""
4中方式都可以正常執行,輸入如下
before
my name is: tom
after
"""
如果把裝飾器函式引數修改了
def
decorator
(func)
:def
(name)
:print
("before"
)# ret = func(*arg, **kwargs)
# 取消原來的不定引數,寫為固定引數
ret = func(name)
print
("after"
)return ret
執行結果
# 普通函式可以正常執行
foo(
'tom'
)# 靜態方法可以正常執行
foo.static_foo(
'tom'
)# 例項方法報錯
foo(
).foo(
'tom'
)# 類方法報錯
foo.class_foo(
'tom'
)
綜上,一般情況下需要寫成不定引數的形式,相容性更強
參考詳解python的裝飾器
裝飾器的使用
import platform def judge platform func def add env parameter a,b if platform.system windows env windows else env linux return func env,a,b return add...
python 裝飾器的使用
使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的 上對原函式新增新的功能。1 在原函式中新增乙個裝飾器 原函式 def sayhello print hello,world sayhello 新增裝飾器後 import functools def decorator fun...
裝飾器的簡單使用
要玩裝飾器,就要知道閉包,何為閉包?我們要從閉包的三要素說起 1.函式巢狀 即乙個函式內部還有乙個函式。2.外部函式返回值為內部函式 名 3.內部函式要用到外部函式的變數。為啥要用裝飾器呢?我的理解為,在不改變原碼的基礎上拓展某些功能,不用再寫一遍 了,在某些程度上減少了 的冗餘。看 import ...