Python装饰器

给函数加上头尾(before、after)
闭包
def outer(origin):
    def inner():
        print 'before...'
        res = origin()
        print 'after...'
        return res
    return inner

def func():
    print 'run function...'
    return 1
1-
print 'before...'
print func()
print 'after...'
2-
func = outer(func)
result = func()
print result
  • 装饰器
    python内部执行decorator(fun),结构赋值给fun
    相当于fun=decorator(fun)
@decorator
def fun():
	pass
3-
@outer
def func():
    print 'run function...'
    return 1
result = func()
print result

在这个例子下还是方法一更加简单易懂。
但是如果需要很多函数加上头尾,明显装饰器的方法更加合适,利于维护
装饰的函数需要传入多个参数时,可以动态传参

# 例如
# 需要在inner和orgin加上动态参数
def outer(origin):
    def inner(*arg, **kwargs):
        print 'before...'
        res = origin(*arg, **kwargs)
        print 'after...'
        return res
    return inner
##################################   
@outer
def func1(a):
    print 'run function...'
    return 1
    
@outer
def func2(a, b):
    print 'run function...'
    return 1
##################################
func1(1)
func2(1,2)

functools

@functools.wraps(origin)
可以使装饰器函数的name,doc保持为原函数的内容

import functools
def outer(origin):
    @functools.wraps(origin)
    def inner():
        res = origin()
        return res
    return inner
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值