python中的装饰器

来源:互联网 发布:日本房产中介 知乎 编辑:程序博客网 时间:2024/06/06 06:56

今天看到一个程序中的@恍惚中有点印象,查了一下,是之前就没怎么学会的装饰器,感觉没彻底弄懂等于没学
廖雪峰的博客
如何理解python中的装饰器
python装饰器为什么难理解
二.python 面试题装饰器

装饰器的作用就是为已经存在的对象添加额外的功能,装饰器本质上是一个Python函数。装饰器在Python使用如此方便都要归因于Python的函数能像普通的对象一样能作为参数传递给其他函数,可以被赋值给其他变量,可以作为返回值,可以被定义在另外一个函数内。
@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作

def log(func):    def wrapper(*args, **kw):        print('call %s():' % func.__name__)        return func(*args, **kw)    return wrapper
@logdef now():    print('2015-3-25')

类装饰器:

class Foo(object):    def __init__(self,func):        self._func=func    def __call__(self):        print('class decorrator running')        self._func()        print('class decorator ending')@Foodef bar():    print ('bar')bar()

输出是:

class decorrator runningbarclass decorator ending

注:

_单下划线开头:弱“内部使用”标识,如:”from M import *”,将不导入所有以下划线开头的对象,包括包、模块、成员

单下划线结尾_:只是为了避免与python关键字的命名冲突

__双下划线开头:模块内的成员,表示私有成员,外部无法直接调用

双下划线开头双下划线结尾:指那些包含在用户无法控制的命名空间中的“魔术”对象或属性,如类成员的name、doc、init、import、file、等。推荐永远不要将这样的命名方式应用于自己的变量或函数。

原创粉丝点击