Discuss / Python / 第二题有一点疑问

第二题有一点疑问

Topic source

posroachips

#1 Created at ... [Delete] [Delete and Lock User]

第二题我原本想用调用默认参数的方法来做,下面是我写的装饰器的代码:

def log(text=''):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

结果在定义原始函数的时候就不能用@log而必须用@log(),要不会提示

decorator() missing 1 required positional argument: 'func'

但是写@log()的话不就相当于我自己手动在函数名前面加上了一个等于空值的字符串了吗?

我没想通为什么会这样。

(当然我这个函数定义的还是有点问题,如果不带 'excute' 的话函数名前面会出现一个空格)

我觉得楼主想到调用默认参数好厉害 @log def now() 相当于 log(now) 而 @log() def now log() 相当于 decorator 所以是相当于 decorator(now) 并不是楼主想到的 手动在函数名前面加上了一个等于空值的字符串了吗?


  • 1

Reply