Python装饰器是如何获取被装饰函数的参数的?

def debug(func):
    def wrapper(*args, **kwargs):  
        print "[DEBUG]: enter {}()".format(func.__name__)
        print 'Prepare and say...',
        return func(*args, **kwargs)
    return wrapper  

@debug
def say(something):
    print "hello {}!".format(something)

如题,debug怎么获取something呢?debug只接收了func啊?连带参数一起接收了吗?

阅读 9.2k
2 个回答
# debug 返回的是函数wrapper 所以
@debug
def say(something):
    print "hello {}!".format(something)
# 等价于
debug(say)(something)
# 等价于
wrapper(something)
# 从 def wrapper(*args, **kwargs)可知,something传递到了*args中
新手上路,请多包涵

say = debug(say) ==> say = warpper
say(something) 等同于 warpper(something)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏