Python之裝飾器

2021-09-17 21:17:41 字數 2905 閱讀 4685

裝飾器:

把乙個函式當作引數,返回乙個替代版的函式

本質就是乙個返回函式的函式

「在不改變原函式的基礎上,給函式增加功能」

def desc(fun):

def add_info(): # 實際功能函式

print('hello world')

fun()

return add_info # 返回乙個功能函式

@desc # 使用@語法糖的方式呼叫

def login():

print('login...')

@desc # 使用@語法糖的方式呼叫

def logout():

print('logout...')

login()

logout()

執行效果:

#函式對修改是封閉的,對擴充套件是開放的

import time

def f1(): #新增功能時,一般不會直接更改函式

print('this is a function')

def f2():

print('this is a function')

def print_current_time(func): #函式功能擴充套件

print(time.time())

func()

print_current_time(f1)

print_current_time(f2)

**示例:

import time

def decorator(func):

print(time.time())

func()

@decorator

def f1():

print('this is a function...')

def f2():

print('this is a function...')

f1()

import time

def decorator(func):

print(time.time())

func(*args)

@decorator

def f1(func_name):

print('this is a function ' + func_name)

@decorator

def f2(func_name1,func_name2):

print('this is a function ' + func_name1)

print('this is a function ' + func_name2)

f1('test')

f2('test1','test2')

執行效果:

示例:

import time

def decorator(func):

def warpper(*args,**kwargs):

print(time.time())

func(*args,**kwargs)

return warpper

@decorator

def f1(func_name):

print('this is a function ' + func_name)

@decorator

def f2(func_name1,func_name2):

print('this is a function ' + func_name1)

print('this is a function ' + func_name2)

@decorator

def f3(func_name1,func_name2,**kwargs):

print('this is a function ' + func_name1)

print('this is a function ' + func_name2)

print(kwargs)

f1('test')

f2('test1','test2')

f3('test1','test2',a=1,b=2,c='redhat')

執行效果:

**示例:

import time

import functools

def add_log(fun):

@functools.wraps(fun)

start_time = time.time()

res = fun(*args,**kwargs)

end_time = time.time()

return res

@add_log

def add(x,y):

time.sleep(1)

return x + y

add(1,2)

執行效果:

python裝飾器介紹 Python之裝飾器簡介

python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...

python 找到裝飾器 Python之裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...

Python之裝飾器

裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...