码迷,mamicode.com
首页 > 编程语言 > 详细

python装饰器的小细节

时间:2017-09-24 23:39:18      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:hid   aec   替换   div   对象引用   out   too   1.2   name   

以下是我看见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装饰器的小细节

标签:hid   aec   替换   div   对象引用   out   too   1.2   name   

原文地址:http://www.cnblogs.com/fuzzier/p/7588975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!