Pythonにおける内部関数の扱いに関する注意点
Pythonでは、ネストされた関数があるだけでなく、ある関数が別の関数を返すこともできます。例えば、関数outerが関数innerのソースコードを結果として返すとします:
def outer():
def inner():
return '+++'
return inner
変数resに関数outerの呼び出しを代入してみましょう:
res = outer()
print(res)
コードを実行すると、関数オブジェクトが出力されます:
<function outer.<locals>.inner at 0x000001564A212B90>
変数resを括弧付きで呼び出すと、メッセージ'+++'が返されます:
print(res()) # '+++'を出力
コードを、resにouter自体の呼び出しと関数innerの呼び出しのために二重の括弧を付けて代入するように書き換えることができます。これは、外側の関数の右側に、その中にネストされた関数の数に応じた追加の括弧を書けることを意味します:
res = outer()()
print(res) # '+++'を出力
次のコードが与えられています:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
コンソールに何が出力されるか答えなさい。
次のコードが与えられています:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
コンソールに何が出力されるか答えなさい。