Python装饰器
装饰器本质上就是一个闭包函数,装饰器有且只有一个参数,参数为要装饰的函数
作用:不改变原函数,而增强其功能
def decorator(fn):
def inner():
print('已登录')
fn()
return inner
@decorator
def work():
print('可以进行游戏')
work()
# 不改变work函数统计work函数执行的时间
from time import *
def function(fn):
def inner():
begin = time()
fn()
over = time()
print('时间:',over - begin)
return inner
@function # 装饰器
def work():
for i in range(1000):
print(i)
work()
# 通用装饰器
# 可以理解为你装饰的函数什么结构内部函数就要什么结构
def function(fn):
def inner(*args,**kwargs):
print('正在执行加法运算')
return fn(*args,**kwargs)
return inner
@function
def add(*args,**kwargs):
result = 0
for i in args:
result += i
for value in kwargs.values():
result += value
return result
result = add(name=1,age=3)
print(result)
result1 = add(1,3,4)
print(result1)
result2 = add(5,age=18)
print(result2)
# 多个装饰器使用,装饰过程由内到外
def make_div(fn):
def inner():
return '<div>' + fn() + '<div>'
return inner
def make_p(fn):
def inner():
return '<p>' + fn() + '<p>'
return inner
@make_div
@make_p
def content():
return '人生苦短,我用python'
print(content())
# 装饰器同时装饰两个函数,通过包装返回装饰器达到效果
def return_function(flag):
def function(fn):
def inner(a,b):
if flag == '+':
print('正在执行加法运算')
return fn(a,b)
elif flag == '-':
print('正在执行减法运算')
return fn(a,b)
return inner
return function
@return_function('+')
def add(a,b):
return a + b
@return_function('-')
def sub(a,b):
return a - b
print(add(1,3))
print(sub(1,3))