Python深度嵌套工厂函数

2024-05-14 16:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

通过“学习Python”工作遇到了工厂函数。这个教科书中的例子起作用:

def maker(N):
    def action(X):
        return X ** N
    return action


>>> maker(2)
<function action at 0x7f9087f008c0>
>>> o = maker(2)
>>> o(3)
8
>>> maker(2)
<function action at 0x7f9087f00230>
>>> maker(2)(3)
8

然而,当我深入到另一个层次时,我不知道如何称呼它:

^{pr2}$

为什么superfunc(1)(2)(3)不起作用而maker(2)(3)起作用?在

虽然这种嵌套在我看来不是一个好的、可用的代码,但是Python仍然接受它为有效的,所以我很好奇如何调用它。在


Tags: 函数代码return工厂deffunctionactionat
3条回答

修正了superfunc,并给出了一个调用示例

def superfunc(X):
    def func(Y):
        def subfunc(Z):
            return X + Y + Z
        return subfunc
    return func

print superfunc(1)(2)(3)

您的superfunc中的某个地方缺少返回值:return表示subfunc,但没有{}。在

得到一个TypeError,因为函数func不返回任何内容(因此它的返回值是NoneType)。它应该返回subfunc

>>> def superfunc(X):
...     def func(Y):
...             def subfunc(Z):
...                     return X + Y + Z
...             return subfunc
...     return func
... 

相关问题 更多 >

    热门问题