python装饰器的小细节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python装饰器的小细节相关的知识,希望对你有一定的参考价值。

以下是我看见python装饰器的一些我不熟悉的特点,所以记录一下

1 装饰器的特性

  1.1 可以吧被装饰的函数替换成不同的函数  decorate(func)。

  1.2 加载模块时候立即执行。这点很有用

2 闭包的特点

  2.1 inner 能访问 outer 及其祖先函数的命名空间内的变量(局部变量、函数参数)

  2.2 调用 outer 已经反悔了,但是他的命名空间被返回的 inner 对象引用,所以不会被回收

3 functool.wraps(func):

  总结起来就是保存了func的 __name__, __doc__ 等信息,例如:

技术分享
# -*- coding: utf-8 -*-

import functools


def wrap1(func):
    @functools.wraps(func)
    def inner():
        print wrap1
        return func()
    return inner


def wrap2(func):
    def inner():
        print wrap2
        return func()
    return inner


@wrap1
def func1():
    print func1
    return


@wrap2
def func2():
    print func2
    return


if __name__ == __main__:
    print have wrap:  + func1.__name__
    print have not wrap:  + func2.__name__


[output:]
have wrap: func1
have not wrap: inner
View Code

 

以上是关于python装饰器的小细节的主要内容,如果未能解决你的问题,请参考以下文章

关于装饰器的两个小练习

python-day4-装饰器的使用

Python小脚本基于装饰器的函数日志脚本

Python小脚本基于装饰器的函数日志脚本

装饰器的小练习

python装饰器