python3-装饰器

Administrator
发布于 2024-05-09 / 1 阅读
0

python3-装饰器

python3 闭包

闭包是一个函数和它所引用的环境组合而成的实体。在Python中,闭包通常是在一个函数内定义另外一个函数,内部函数引用了外部函数的变量,然后返回内部函数作为结果。

下面是一个简单的闭包示例:

def outer_func(outer_var):
    def inner_func():
        print(outer_var)
    return inner_func
 
# 创建闭包
closure = outer_func("Hello, Closure!")
 
# 调用闭包
closure()

在这个例子中,inner_func 是一个闭包,因为它访问了定义它的父函数outer_func的变量outer_var。当我们调用outer_func时,它返回了一个inner_func函数,这个函数在执行时可以访问outer_var。即使outer_func的执行环境已经结束,闭包仍然存在,保留了对原始定义作用域中变量的引用。

python3 装饰器

装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限验证等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

装饰器实现原理

#无参数装饰器原理:
def login(funct):
    print('passed user veriftcation...')
    return funct   #函数返回形参的值或内存地址

def tv():
    print('welcom  to TV page')
tvv= login(tv)   #执行login函数,参数tv返回tv函数的内存地址
tvv()  #执行生成器函数将执行tv函数

 装饰器带传参函数,多层装饰器:

#验证函数
def login(*args,**kwargs):
    print('%s登陆验证%s!'%(args,kwargs))
#登陆后操作
def quanxian(*args,**kwargs):
    print('%s登陆后操作!%s'%(args,kwargs))
#装饰器
def decorator(login_func,quanxian_func): #传参2个函数
    def inner(index_func):   #传参登陆函数
        def inner2(*args,**kwargs):  #接收index的传参
            login_func(*args,**kwargs)  #执行login函数
            index_func(*args,**kwargs)  #执行index函数
            quanxian_func(*args,**kwargs)  #执行quanxian函数
        return inner2   #返回函数地址
    return inner  #返回函数地址
@decorator(login,quanxian)  #执行装饰器
def index(*args,**kwargs):  #登陆函数
    print('登陆后台!%s,%s'%(args,kwargs))
l1 = [1,2,3,4]
dic = {'k1':'v1','k2':'v2'}
index(l1,dic)    #执行函数