zoukankan      html  css  js  c++  java
  • python 装饰器

    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 f(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就是一个闭包。当闭包执行完后,仍然能够保持当前的运行环境,并且可以根据外部作用域的变量得到不同的结果。

  • 相关阅读:
    Java代码性能优化
    Kafka学习笔记(二、Kafka中的角色)
    CentOS 安装并运行Kafka
    CentOS ping name or service not known问题解决
    CentOS静态IP配置
    Kafka学习笔记(一、Kafka基础)
    sql去除中间和两边的空格
    实验二 数据更新与SQL简单查询
    实验一 完成订单数据库
    递归求P函数
  • 原文地址:https://www.cnblogs.com/jiaxinwei/p/11628645.html
Copyright © 2011-2022 走看看