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

    装饰器

    【解释】
    装饰器实质是一个函数,它把一个函数作为为已经输入并且返回另外一个函数,在装饰器中通常使用下面的技巧:
    *args 和**kwargs
    闭包
    作为参数的函数
    下面定义一个装饰器document_it,实现如下功能:
    打印输出函数的名字和参数的值;
    执行含有参数的函数;
    打印输出结果;
    返回修改的函数

    >>> def document_it(func):
    ...     def new_function(*args,**kwargs):
    ...             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
    

    直接在要装饰的函数前添加装饰器的名字

    >>> @document_it
    ... def add_ints(a,b):
    ...     return a+b
    ... 
    >>> add_ints(1,2)
    ('runing function:', 'add_ints')
    ('positional arguments:', (1, 2))
    ('keyword arguments:', {})
    ('result:', 3)
    3
    

    同样一个函数可以有多个装饰器,下面写一个对结果求平方的装饰器square_it()

    >>> def square_it(func):
    ...     def new_functions(*args,**kwargs):
    ...             result=func(*args,**kwargs)
    ...             return result*result
    ...     return new_functions
    ... 
    

    靠近函数定义(def 上面的)装饰器最先执行,然后依次执行上面的,任何顺序都会得到相同的最终结果,下面的例子会看到中间步骤的变化

    >>> @document_it
    ... @square_it
    ... def add_ints(a,b):
    ...     return a+b
    ... 
    >>> add_ints(2,3)
    ('runing function:', 'new_functions')
    ('positional arguments:', (2, 3))
    ('keyword arguments:', {})
    ('result:', 25)
    25
    

    交换两个装饰器的顺序

    >>> @square_it
    ... @document_it
    ... def add_ints(a,b):
    ...     return a+b
    ... 
    >>> add_ints(3,5)
    ('runing function:', 'add_ints')
    ('positional arguments:', (3, 5))
    ('keyword arguments:', {})
    ('result:', 8)
    64
    
  • 相关阅读:
    JAVA传值与传址
    JAVA中的栈和堆
    for语句输出图形
    Linux下ps命令详解(转载)
    BMC介绍
    JVM 优化、内存泄露排查、gc.log 分析方法等(转载)
    动态从zookeeper读取kafka信息
    centos 查看文件系统类型
    TCPdump抓包命令详解
    Linux Tab键自动补齐
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5704488.html
Copyright © 2011-2022 走看看