为了账号安全,请及时绑定邮箱和手机立即绑定

如果我们(反常地)要求解释器评估组合 f(f) 会发生什么?

如果我们(反常地)要求解释器评估组合 f(f) 会发生什么?

慕姐8265434 2021-11-02 19:15:17
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]intCallable[int, T]。An不是。f(f)无效的申请也是如此;如果您使用的是Mypy之类的工具,它应该会捕捉到这一点。

在运行时,实际上不会检查类型提示。但是运行时类型仍然以相同的方式相互影响。

调用会f(f)导致以下调用:

  • f(f)意味着gf,并导致调用f(2)

  • f(2)意味着g2,并导致尝试评估2(2)

应用()运算符 tog意味着调用__call__特殊方法,但int不实现__call__。因此,您会收到您描述的错误消息:

TypeError: 'int' object is not callable


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信