外縁部:re

学んだことのメモです: Notebook of Study

「ゼロから作る Deep Learning」 の numerical_gradient メソッドの名前空間についてのメモ

こちらの本のp 114で

...
from common.gradient import numerical_gradient

class TwoLayerNet:
    ...
    def numerical_gradient(self, x, t):
        ...
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])

とあって、再帰呼び出しになって止まらないか…と思ったのですが止まりませんでした。

気になったのでテストして見ます。

test_module.py

def test_function(a,b):
    return a + b

test.py

from test_module import test_function

class TestClass(object):
    def test_function(a,b):
        c = test_function(a,b) * 4 # ここで呼ばれるのはimportした方のtest_function
        return c

print(test_function(2,3)) # => 5
print(TestClass.test_function(2,3)) # => 20

こんな感じの結果になりました。TestClass.test_functionと5行目の呼び出し部を書き換えると再帰呼び出しになります。 classでモジュールを切っているので、名前空間がそうなる理由なのかと思いますが、また時間見つけてドキュメント調査します。