python 3.7.8版本,闭包问题,执行代码报错,原因不知道

学到闭包这块,执行这段代码出现报错 TypeError: 'int' object is not callable 有大佬知道怎么回事吗?


def outer(args):
    a = 1
    b = 2
    c = 3

    def inner():
        return a+b+args
    return inner()


outer(1)()

这样报错

源于chatGPT仅供参考

在给定的代码中,问题出在最后一行 `outer(1)()` 上。错误提示 `TypeError: 'int' object is not callable` 表明您尝试调用一个整数对象,但它并不可调用。

要解决这个问题,您需要对闭包的使用进行适当的调整。在当前代码中,`outer()` 函数返回的是 `inner()` 函数的执行结果,而不是 `inner` 函数本身。因此,在调用 `outer(1)` 后,得到的是 `inner()` 的返回值(即整数类型),而不是一个可调用的函数。

以下是修正后的代码示例:

```python
def outer(args):
    a = 1
    b = 2
    c = 3

    def inner():
        return a + b + args

    return inner  # 返回 inner 函数本身,而不是调用 inner


result = outer(1)
print(result())  # 调用 result,而不是直接执行 outer(1)()

在修正后的代码中,我们将 outer() 函数返回的是 inner 函数本身,而不是执行 inner() 并返回其结果。然后,我们将返回的函数赋值给变量 result,并在之后通过 result() 进行调用。

这样就能够正确地使用闭包,并避免了 TypeError 报错。

请注意,在调用闭包函数时,确保传入参数的类型和数量与定义时一致。

如果您有任何进一步的问题,请随时提问。

```

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7766666
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Python:TypeError: 'int' object is not callable
  • 除此之外, 这篇博客: python程序报错Error:'int' object is not callable解决方法中的 原因 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 报错 XXX is not callable时,是因为代码调用了一个不能被调用的变量或对象。具体而言,可能是调用了错误的函数和变量。易错情况就是函数和变量同名了,使得调用函数时,系统会误认为这是在调用变量,造成错误。
    eg:

    len = seq.__len__()//len是保存seq大小的变量
    ..................
    ..................
    print len(seq)//len为系统提供的求list/dict等类型变量的大小的函数
                 //此处会报错 is not collable,因为变量len与函数len同名