python闭包的应用之一:装饰器

 在定义函数时,有时候需要使用多个函数有相同的功能或者想要给函数增加新的功能,装饰器可以给方法或函数增加新的功能,自定义模板给多个函数或者方法进行修饰

 闭包

def External_functions(num1):          #定义外部函数 External_functions
    def Intrinsic_functions(num2):     #定义内部函数 Intrinsic_functions
        print(num1 + num2)

    # 返回内部函数的引用
    return Intrinsic_functions


# 给外部函数赋值 因为内部函数引用了外部函数的形参或者局部变量 
# 引用计数增加 函数结束后引用计数不为零不会被销毁
# s1 = 尾部函数的返回值并给num1 赋值
s1 = External_functions(3)
# 调用s1 调用内部函数Intrinsic_functions并传参
s1(2)

 装饰器

def External_functions(fun):
    def Intrinsic_functions():
        print('装饰函数前装饰效果')
        fun()
        print('装饰函数后装饰效果')
    return Intrinsic_functions

#定义被装饰函数
def fun_1():
    print('fun_1')



# 函数的本质就是function对象,函数可以当做参数进行传递
# 将fun_1作为参数传递给External_functions(fun)
s1 =External_functions(fun_1)
s1()

通用装饰器:

def External_functions(fun,*args,**kwargs):

    def Intrinsic_functions(*args,**kwargs):
        print('装饰函数前')
        fun(*args, **kwargs)
        print('装饰函数后')
    return Intrinsic_functions

#语法糖 定义函数时 @外部函数名 即可达到引用装饰器效果 #####
@External_functions(外部函数参数列表)
def fun_2(num_1,num_2):
    print(num_1+num_2)

fun_2(3,5)

 函数参数传递过程:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值