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

    装饰器

    装饰器(Decorators)是修改其他函数的功能的函数。需要在不改变源代码的情况下修改已经存在的函数,常见的例子是增加一句调试声明,以便查看传入的参数。

    装饰器本质上是一个函数,它把一个函数作为输入并且返回另一个函数。

    def document_it(func):
        def new_function(*args, **kwargs):
            '''*args是非关键字参数,用于元组,**kw是关键字参数,用于字典'''
            print("Runing function: ", func.__name__)
            print("Positional arguments: ", args)
            print("Keyword arguments: ", kwargs)
    
            result = func(*args, **kwargs)
    
            print("Result: ", result)
            return result
    
        return new_function
    
    def add_ints(a, b):
        return a+b
    
    print(add_ints(3, 5))
    
    cooler_add_ints = document_it(add_ints) # 人工对装饰器赋值
    cooler_add_ints(3, 5)

     单个装饰器

    多个装饰器:先执行靠近定义函数的装饰器,再执行外面的装饰器。

    ''' 一个函数可以有多个装饰器 '''
    def document_it(func): # 装饰器函数
        def new_function(*args, **kwargs):
            '''*args是非关键字参数,用于元组,**kw是关键字参数,用于字典'''
            print("Runing function: ", func.__name__)
            print("Positional arguments: ", args)
            print("Keyword arguments: ", kwargs)
    
            result = func(*args, **kwargs)
    
            print("Result: ", result)
            return result
        return new_function
    def square_it(func):
        def new_function(*args, **kwargs):
            result = func(*args, **kwargs)
            return result*result
        return new_function
    
    ''' 靠近函数定义的装饰器最先执行,然后依次执行上面的。 '''
    @document_it
    @square_it
    def add_ints(a, b):
        return a+b
    print(add_ints(3, 5))
    print("ending")

  • 相关阅读:
    Spark架构分析
    mr运行出错,解决办法
    hbase调优
    虚拟机长时间不关造成的问题
    crontab 使用
    虚拟机克隆网络问题的解决
    ligerui.grid.extend.rowSpan
    64位下安装Scrapy 报错 "could not find openssl.exe" 的解决方法。
    EventBus 事件总线之我的理解
    MongoDB 系列(二) C# 内嵌元素操作 聚合使用
  • 原文地址:https://www.cnblogs.com/xieyi-1994/p/13965703.html
Copyright © 2011-2022 走看看