通过“学习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
然而,当深入到另一个级别时,我不知道如何调用它:
>>> def superfunc(X):
... def func(Y):
... def subfunc(Z):
... return X + Y + Z
... return func
...
>>> superfunc()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: superfunc() takes exactly 1 argument (0 given)
>>> superfunc(1)
<function func at 0x7f9087f09500>
>>> superfunc(1)(2)
>>> superfunc(1)(2)(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
>>> superfunc(1)(2)
>>>
superfunc(1)(2)(3)
为什么maker(2)(3)
无效?
虽然这种嵌套对我来说看起来不是一个好的,可用的代码,但Python仍然认为它是有效的,所以我很好奇如何调用它。
答案 0 :(得分:4)
您得到TypeError
因为函数func
没有返回任何内容(因此返回NoneType
)。它应该返回subfunc
:
>>> def superfunc(X):
... def func(Y):
... def subfunc(Z):
... return X + Y + Z
... return subfunc
... return func
...
答案 1 :(得分:2)
superfunc
中的某个地方遗失了回复:return
有subfunc
,func
没有。{/ p>
答案 2 :(得分:2)
superfunc已更正,带有调用示例
def superfunc(X):
def func(Y):
def subfunc(Z):
return X + Y + Z
return subfunc
return func
print superfunc(1)(2)(3)
答案 3 :(得分:1)
你忘记了第二个功能的返回。 这是固定功能
def superfunct(x):
def func(y):
def subfunc(z):
return x + y + z
return subfunc
return func
print superfunct(1)(2)(3)