您的位置:首页 > 其它

装饰器获取内部函数的变量值,这个方法简直太有爱了!

2012-07-09 15:02 309 查看
我的需求是这样的,我有很多个函数,其中大部分函数有一个参数叫arg,并且默认值是True,同时可能会有一些别的不确定参数也就是:

def test(x,y,z,arg=True,a=0,b):


我想要写一个装饰器,根据每个函数中的arg的值来做一些事情,但是上述这种情况的话想要准确获取到我调用test这个方法时arg的值就很困难。

最后在三碗同学的帮助下,找到了一个方法:

inspect.getcallargs


整理后我的代码是这样:

# -*- coding: utf-8 -*-
from inspect import getcallargs

def smart_do(func):
"""每次都需要判断arg来看是否做哪些事情好烦有没有
"""
def inner(*args, **kwargs):
all_args = getcallargs(func, *args, **kwargs)
arg = all_args.get('update')
do something.....
return func(*args, **kwargs)
return inner

@smart_do
def a(a,b,arg=True):
do something...


感谢,鞠躬! 〈(_ _)〉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: