【问题标题】:function wrapping exercise (decorators)函数包装练习(装饰器)
【发布时间】:2017-11-05 09:25:24
【问题描述】:

我对以下练习有疑问:https://pythonprogramming.net/decorators-intermediate-python-tutorial/ 这是我想写的代码:

def add_wrapping(item):
    def wrapped_item():
        return 'a wrapped up box of {}'.format(str(item()))
    return wrapped_item

@add_wrapping
def new_gpu():
    return 'a new Tesla P100 GPU!'
print(new_gpu())

这是我的代码:

def add_wrapping(item):
    def wrapped_item():
        return "a wrapped up box of {}".format(str(item()))
    return wrapped_item()
@add_wrapping
def new_gpu():
    return "new car!"
print(new_gpu())

我在 PyCharm 工作,这是它给我的错误:

line 17, in <module>
    print(new_gpu())
TypeError: 'str' object is not callable

我被困在这一点上,不知道出了什么问题,感谢任何帮助!

【问题讨论】:

  • 使用return wrapped_item。目前,您在返回之前调用函数,这导致new_gpu 被分配给wrapped_item() 的结果,即str
  • 为什么你要写的代码和你写的代码不一样?
  • 代码不同,因为我不想重写他的代码,而是创建了自己的代码,但仍然在给定的练习中

标签: python python-3.x python-decorators


【解决方案1】:

首先你需要返回wrapped_item对象而不是返回wrapped_item()

例如,您可以在装饰器中调用 func 参数。

def add_wrapping(func):
    def wrapped_item():
        return "a wrapped up box of " + func()
    return wrapped_item

@add_wrapping
def new_gpu():
    return "new car!"
print(new_gpu())

但如果您在 new_gpu 函数中返回 str 参数,它将起作用。

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 2011-06-25
    • 2021-04-06
    • 2017-09-13
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多