2017-06-02 103 views
0
def log(func): 
    def wrapper(*args, **kw): 
     print('call %s():' % func.__name__) 
     return func(*args, **kw) 
    return wrapper 
@log 
def now(): 
    print('2017-5') 

为什么在中间套住包装函数,为什么不呢?这是我在stackoverflow中的第一个问题,我不擅长英文。所以我的描述存在任何问题,请原谅我。谢谢!为什么python装饰器函数嵌套一个函数?

def log(func): 
    print('call %s():' % func.__name__) 
    return func(*args, **kw) 
@log 
def now(): 
    print('2017-5') 
+0

你试过第二个选项吗?你看见什么了?这将回答你的问题。 –

+0

如果删除(* args,** kw),它可以正确运行。但是函数日志无法获取参数? – AllitWell

回答

0

大约装饰了一下:

@decorator 
def func(): 
    ... 

正好等于:

func = decorator(func) 

正如你可以看到,在第一个选项print('call %s():' % func.__name__)将调用任何时候当你的功能now是在你的程序中调用。在第二个选项中,当修饰器仅适用而不调用now时,将调用此print

使用了嵌套函数,因为修饰器用原来的函数替换原来的函数。