python中的装饰器详解

1180次阅读  |  发布于5年以前

在了解装饰器的之前一定要先了解函数作为参数传递, 什么是函数内嵌,请参考我之前写的博客函数简介

因为在python里面,函数也是对象,也可以作为参数进行传递.python装饰器本质也是一种特殊函数,它接收的参数是函数对象,然后动态地函数参数添加额外的功能,而不用修改原有的函数对象.python装饰器传入的参数是函数,返回的值也是函数!
python装饰器思想有点类似设计模式的装饰模式, 其意图是动态地给函数对象添加额外的功能.比如像增加日志打印的功能,有点面向切面编程(AOP)的感觉.
装饰器语法

以@开头,接着后面跟着的是装饰器的名字和可选的参数.装饰器语法是一种语法糖.
格式如下

复制代码 代码如下:

@decomaker(deco_args)
def foo(func_opt_args)

可以组合,等价于foo = g(f(foo))

复制代码 代码如下:

@g
@f
def foo():
statement

简单装饰器

实例

复制代码 代码如下:

!/usr/bin/python

def deco(func):
print 'start'
func()
print 'end'
return func

@deco
def foo():
print 'In foo'

foo()
foo()

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8