加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python 装饰器

发布时间:2020-12-20 10:23:28 所属栏目:Python 来源:网络整理
导读:1.装饰器 对已有函数 def add(x,y): return x+y 如果需要添加返回原始数据的功能,则必须重写return语句,并且会改变返回值的类型。对于已经编写完成的程序,改动一处可能会造成其他相关部分出错。 利用装饰器则可以在不必改动原有函数的前提下增加功能,经

1.装饰器

对已有函数

def add(x,y): 
    return x+y 

如果需要添加返回原始数据的功能,则必须重写return语句,并且会改变返回值的类型。对于已经编写完成的程序,改动一处可能会造成其他相关部分出错。

利用装饰器则可以在不必改动原有函数的前提下增加功能,经常被用于事务处理、日志记录、验证权限、调试测试等有需求的场景。

def decorator(f):
    def new_f(x,y):
        print(‘参数1为%d,参数2为%d‘ %(x,y))
        return f(x,y)
    return new_f

定义了一个新函数new_f来包装传入的函数f,用return f(x,y)在不改变原调用结果的前提下,添加了输出原始参数数据的功能。

例:利用装饰器为add函数添加输出原始数据功能并进行测试

def decorator(f):
    def new_f(x,y):
        print(‘参数1为%d,参数2为%d‘%(x,y)
    return  new_f

@decorator
def add(x,y):
    return x+y

print(add(2,3))

运行结果为:

参数1为2,参数2为3

5

2.闭包

闭包是将函数的语句和执行环境打包在一起得到的对象,当执行嵌套函数时,闭包将获取内部函数所需的整个环境,嵌套函数可以使用外层函数中的变量而不需要通过参数引入。

例:简单的闭包示例

?

def outer(x):
    def inner(y):
        return x+y
    return inner

f = outer(5)
print(f(20))

其中,inner(y)是嵌套于outer(x)中的内部函数,inner引用了外层作用域变量x,这个内部函数inner就是一个闭包。当闭包执行完后,仍然能够保持当前的运行环境,并且可以根据外部作用域的变量得到不同的结果。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读