def f(g): return g(2)def square(x): return x ** 2>>> f(square)4>>> f(lambda z: z * (z + 1))6>>> f(f)TypeError: 'int' object is not callable我的解释:我认为在f(g),g作为一个参数必须是一个功能,使得下部水平函数可以用G = 2的参数来调用。然而f(f),正如前面提到的那样,将自己称为函数,g它必须是一个函数。但是,f(2)不可调用。因此导致错误。我不确定我是否完全解释了为什么参数g必须是一个函数。以及我是否完整地解释了这个问题。
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
f
是一个函数,它有一个参数,g
,它必须是一个可调用的,可以被应用到int
。也就是说,使用typing
模块中的类型提示语法,我们可以说:
def f(g: Callable[int, T]) -> T: return g(2)
是否f
本身有型Callable[int, T]
?int
不Callable[int, T]
。An不是。f(f)
无效的申请也是如此;如果您使用的是Mypy之类的工具,它应该会捕捉到这一点。
在运行时,实际上不会检查类型提示。但是运行时类型仍然以相同的方式相互影响。
调用会f(f)
导致以下调用:
f(f)
意味着g
是f
,并导致调用f(2)
f(2)
意味着g
是2
,并导致尝试评估2(2)
应用()
运算符 tog
意味着调用__call__
特殊方法,但int
不实现__call__
。因此,您会收到您描述的错误消息:
TypeError: 'int' object is not callable
添加回答
举报
0/150
提交
取消