装饰器详解

本文详细解释了闭包的概念及其如何减少内存消耗,并通过实例介绍了装饰器的作用及其实现方式,帮助读者更好地理解这两种Python高级特性。

闭包

如果一个函数反复调用,会造成内存消耗,闭包的特性就是当调用外部函数的变量的时候,运行结束后再内存中不会释放,反复调用就不会对内存造成消耗
闭包的定义:当内部函数使用了外部函数的变量(注意不是全局变量)的时候,称这种方式为闭包

def f1(a):
    def f2():
        print(a)
        return a
    return f2

概念

如果想在某个函数的之前或是之后增加一些操作,比如验证登陆、写日志、性能测试等等,这些代码可能是临时的,如果直接在源代码中修改,会造成程序整体的破坏,产生BUG,甚至造成程序的崩溃,此时就需要装饰器这个神器了。

详解

由于文字的方式不够直观,所以就直接上图吧
这里写图片描述

上面的还不是完整的装饰器,装饰器的最终形态是这样的

def zhuangshiqi(tem_func):
    def inner(*args, **kwargs):
        print("函数前面执行的")
        ret = tem_func(*args, **kwargs)
        print("函数后面执行的")
        return ret
    return inner

@zhuangshiqi
def func(s):
    print("s:%s" % s)
    return s

func("hahaha")

装饰器的样式

def wrapper(func):
    def inner(*args,**kwargs):
        """被装饰函数执行之前要添加的代码"""
        ret = func(*args,**kwargs)
        """被装饰函数执行之后要添加的代码"""
        return ret
    return inner
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值