学到闭包这块,执行这段代码出现报错 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 报错。
请注意,在调用闭包函数时,确保传入参数的类型和数量与定义时一致。
如果您有任何进一步的问题,请随时提问。
```
报错 XXX is not callable时,是因为代码调用了一个不能被调用的变量或对象。具体而言,可能是调用了错误的函数和变量。易错情况就是函数和变量同名了,使得调用函数时,系统会误认为这是在调用变量,造成错误。
eg:
len = seq.__len__()//len是保存seq大小的变量
..................
..................
print len(seq)//len为系统提供的求list/dict等类型变量的大小的函数
//此处会报错 is not collable,因为变量len与函数len同名