裝飾器(decorators)可以實現在不變原有python **功能的基礎上增加功能**。
框架
def outer2(func):def inner(*args, **kwargs):
func(*args, **kwargs)
return inner
@outer2
def foo(a, b, c):
print (a+b+c)
示例一:
import timefrom functools import wraps
def time_checker(func):
@wraps(func)
def inner(*args, **kwargs):
time_start = time.time()
ret = func(*args, **kwargs)
print(f' running time is 秒')
return ret
return inner
@time_checker
def func1():
time.sleep(1)
print(f'now func1 is running')
if __name__ == '__main__':
func1()
示例二:
from functools import wrapsdef logit(logfile='out.log'):
def logging_decorator(func):
@wraps(func)
log_string = func.__name__ + ' was called'
print(log_string)
with open(logfile, 'a') as opend_files:
opend_files.write(log_string + '\n')
return func(*args, **kwargs)
return logging_decorator
@logit
def myfunc1():
pass
示例三
def outer_arg(bar):def outer(func):
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
print(bar)
return ret
return inner
return outer
# 相當於 outer_arg('foo_arg')(foo)()
@outer_arg('foo_arg')
def foo(a, b, c):
return (a+b+c)
print(foo(1,3,5))
示例四
class count(object):def __init__(self, func):
self._func = func
self.num_calls = 0
def __call__(self, *args, **kwargs): # 模擬成函式,將類模擬成可呼叫的物件
self.num_calls += 1
print(f'num of call is ')
@count
def example():
print('hello')
示例五
def decorator(aclass):class newclass(object):
def __init__(self, args):
self.times = 0
def display(self):
# 將runtime()替換為display()
self.times += 1
print('run times ', self.times)
return newclass
@decorator
class myclass(object):
def __init__(self, number):
self.number = number
# 重寫display
def display(self):
print('number is', self.number)
six = myclass(6)
for i in range(5):
six.display()
關於python的裝飾器簡單實用
python呼叫函式可以提供 key value 代表這個引數的值,我們可以不用根據函式定義順序來呼叫函式。a,b 可以作為裝飾器提供不定引數。使裝飾器和被裝飾函式 耦合度大幅度降低 函式 def func return 1 返回 函式的名字 func.name 通過裝飾器實現類的靜態方法 clas...
python簡單裝飾器 python裝飾器簡單使用
理解裝飾前先理解python閉包的概念 下面是對裝飾器的簡單舉例 實質 是乙個函式 引數 是你要裝飾的函式名 並非函式呼叫 返回 是裝飾完的函式名 inner 作用 為已經存在的物件新增額外的功能 特點 不需要對物件做任何的 上的變動 被裝飾的函式無引數 def decorate func 裝飾器列...
python 簡單的裝飾器
今天我們講一講python中的裝飾器。可能初次接觸裝飾器的同學會覺得它很難,其實也就那麼一回事兒,今天就讓我們會會它!首先它的本質是函式,它的功能是為其他函式新增附加功能。ps 它有兩個原則 1.不能修改被修飾的函式的 2.不能更改被修飾函式的呼叫函式。我所認為的裝飾器其實就是 裝飾器 高階函式 函...