「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はそれを有効なものとして受け入れているので、これをどのように呼び出すことができるかについて興味があります。