Discuss / Python / 我这个写法为什不行啊

我这个写法为什不行啊

Topic source

汤圆HOT

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

这是我的写法:

import functools

def prompt(txt):
    def deco(func=None):
        if func == None:
            func = txt
        @functools.wraps(func)
        def wrapper(*args, **kwds):
            print(f'{txt} begin call {func.__name__}()')
            func(*args, **kwds)
            print(f'{txt} end call {func.__name__}()')
        print()
        return wrapper
    return deco

@prompt
def f():
   pass

f()

很奇怪调用的时候无法进入wrapper,我觉得逻辑上没有问题啊,是因为python嵌套函数执行顺序的问题吗,求解答

ZHU阿泽

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

return wrapper 上面只是返回你函数的对象 改为下面即可 return wrapper()

黄淘陶

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

now = log(now) 所以now() = log(now)() = decorator() = wrapper

所以要在wrapper中 return wrapper() 或者调用函数时候加多一个() 即now()()

wgl_桂林

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

不能直接@promopt,此时f() = promopt(f)()()= deco()() = wrapper() 参数为空的也应该@promopt('')才对,此时: f() = promopt()(f)() = deco(f)() = wrapper()


  • 1

Reply