python 装饰器

装饰器:本质是一个闭包
作用:在不改变原有函数调用的情况下,给函数增加新的功能

def wrapper(fn):    wrapper: 装饰器, fn: 目标函数
    def inner(*args, **kwargs):
        # 在目标函数执行之前...
        ret = fn(*args, **kwargs) 执行目标函数
        # 在目标函数执行之后...
        return ret
    return inner  # 千万别加小括号

@wrapper
def target():
	pass

# 运行被装饰函数
taget() # =>  inner()


一个函数可以被多个装饰器修饰。
@wrapper1
@wrapper2
def target():
    pass
规则和规律 wrapper1 wrapper2 target wrapper2 wrapper1

示例

def ggg(fn):
    def inner(*args, **kwargs):
        print('开始')
        res = fn(*args)
        print('结束')
        return res 
    return inner 

@ggg
def func(user, passw):
    print(f'账户登录 {user}: {passw}')
    return '123'


print(func('zhangsan', 123))
'''
解析:
运行fun c('zhangsan', 123)时,先调用ggg(@表示要先进去后面函数),进而ggg返回inner,即func表示为inner,进一步调用inner。
'''

输出:

开始
账户登录 zhangsan: 123
结束
123

更多:

posted @ 2023-01-02 16:44  山岚2013  阅读(22)  评论(0编辑  收藏  举报