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
提交
取消
