関数内で関数を定義する

入門Python3 4.7.8


タイトル通り、関数の中で関数を定義することが出来ます。

def foo():
    def bar(a):
        print(a + 1)
    bar(1)

foo()
$ py main.py
2


関数内で定義した関数は、関数の外では呼び出せない模様。

def foo():
    def bar(a):
        print(a + 1)
    bar(1)

bar(10)
$ py main.py
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    bar(10)
NameError: name 'bar' is not defined


ただしfooの戻り値として関数オブジェクトを返せば呼び出せる。

def foo():
    def bar(a):
        print(a + 1)
    return bar

func = foo()
func(10)
$ py main.py
11


直接barを呼び出す方法があるのかもしれないけど、ちょっと調べた感じではわかりませんでした。まぁ無理ってことですかね。