Python 装饰器类型错误 'object is not callable'

Python decorator TypeError 'object is not callable'

我正在努力让自己熟悉装饰器。 这是我为此创建的一个程序,但它一直给我一个 TypeError: 'int' object is not callable 错误,我不知道如何修复。

#Filename: decorator_practice.py

def add(x):
    def add_1():
        add_1 = x() + 1
    return add_1

def minus(x):
    def minus_1():
        return x() - 1
    return minus_1

def multi(x, times=2):
    def multi_2():
        return x() * 2
    def multi_3():
        return x() * 3
    def multi_4():
        return x() * 4

    if times == 2:
        return multi_2
    elif times == 3:
        return multi_3
    elif times == 4:
        return multi_4
    else:
        return "Please enter times between 2 and 4"

def create_x():
    x = input('Give variable x a value: ')
    return x

add(create_x()())

我 运行 并输入:5

谁能帮帮我?谢谢!

你有不必要的(),把add(create_x()())改成add(create_x()), 我建议使用 x = int(raw_input('Give variable x a value: '))

参见以下示例:

def add(x):
    def add_1():
        #add_1 = x() + 1 # remove this line 
        return x+1
    return add_1

def create_x():
    x = input('Give variable x a value: ')
    return x

b = add(create_x())
print 'answer: ', b()

localhost# python t.py 
Give variable x a value: 5
answer: 6

你的create_x函数returns一个整数:

def create_x():
    x = input('Give variable x a value: ')
    return x

所以 create_x()() 永远不会工作

部分问题是您使用了糟糕的参数名称,这让您感到困惑 - 您有两个 x 指的是两个 完全不同的东西 .以你的add装饰器为例,修改为:

def add(func):
    def add_1():
        return func() + 1  # you should return from the inner function
    return add_1

现在希望 add 的参数应该是一个在 add_1 内部调用的函数。因此你可以这样做:

adder = add(create_x)  # don't call create_x yet!
adder()  # calling add_1, which calls create_x

简化为:

add(create_x)()  # note ordering of parentheses

注意这也可以写成:

@add
def create_x():
    ...

create_x()

其中语法 @add 表示 create_x = add(create_x).


一旦您掌握了简单的装饰器,请注意您的 multi 将不会像您期望的那样工作 - 参见例如python decorators with parameters 用于创建带参数的装饰器。