python-装饰器-简介

1.装饰器

装饰器用到了@语法和闭包以及动态参数
这三个功能我都是第一次接触

1.动态参数

*arg **kwarg 这样的写法,
*arg是传单独的变量,a,b…
**kwarg是传字典形式的变量,a:‘11’,b:‘12’…
但是传入的变量的数量不固定,可以任意多,也可以没有。

2.闭包

闭包声明一个在函数内的函数,闭包应用相当最后输出的的是函数名,
如下,func只是得到一个函数名,运行这个函数必须在func后面加上括号才会运行。
闭包相当于只声明函数,不运行函数,到外部需要运行时候加上括号即可运行。

def org():
    def fun():
        return '输出'
    return fun

func = org()
res =func()  
print(res)

3.@语法

@函数名
func():pass

相当于
func = 函数名(func)

4.装饰器

装饰器可以在原来函数基础上添加新的功能,相当于锦上添花,给原来函数装饰起来,用起来更好用。
以下outer函数相当于在func函数内前后加上了两个print。这个替换成其他函数可以实现一些新的功能。

import functools
def outer(origin):
    def inner(*arg,**kwarg):
        print('befer')  #执行前
        res = origin(*arg,**kwarg)  #动态参数
        print('after')  #执行后
        return res
    return inner

@outer  #装饰器
def func(pre):
    print('我是函数')
    return pre
if __name__ =='__main__':
    result = func(100)
    print(result)

最终版应该为以下样子,加入了functools.wraps实现了函数伪装。

'''
@函数名
def func()
相当于 func= 函数名(func)

@语法 
原函数封装在闭包中
可以扩展原函数功能
'''
import functools
def outer(origin):
    @functools.wraps(origin)  #将此装饰器修改的函数的函数名和注释修改成原来的函数 伪装功能 inner.__name__=origin.__name__ inner.__doc__ = origin.__name__
    def inner(*arg,**kwarg):
        print('befer')  #执行前
        res = origin(*arg,**kwarg)  #动态参数
        print('after')  #执行后
        return res
    return inner

@outer  #装饰器
def func(pre):
    print('我是函数')
    return pre

@outer  #装饰器
def func1(num1,num2):
    print('我是函数1')
    return [num1,num2]

if __name__ =='__main__':
    result = func(100)
    print(result)
    result = func1(10,20)
    print(result)

2.总结

自己记性不太好,学了总忘记了,装饰器挺重要,为了防止自己忘记,还是专门写了一些东西

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值