Pythonにおける関数内関数
Pythonでは、ある関数の内部で他の関数を宣言することができます。
外部関数 outer があり、その内部に関数 inner があるとします:
def outer():
def inner():
pass
上記の例は十分にシンプルに見えます。
しかし、多くの場合、関数 outer の本体では、
inner 以外の操作も実行されます。
コードを簡略化するために、inner を外部のコードブロックに
移動することも考えられますが、この関数は一度だけ、
しかも関数 outer の内部でのみ使用されます。
したがって、そのスコープ外に出す意味はありません。
関数 outer にリストが渡され、
関数 inner を使用してリストの数値要素を
2乗する例を見てみましょう。
このため、関数 inner の後に空のリスト res を宣言し、
ループ内で2乗された要素を累積していきます:
def outer(lst):
def inner(num):
return num ** 2
res = []
for el in lst:
res.append(inner(el))
return res
関数 outer を呼び出し、
パラメータとしてリストを渡して結果をコンソールに出力してみましょう:
print(outer([2, 3, 5])) # [4, 9, 25] を出力
リストの各文字列要素を大文字で始まるように出力する、 外部関数と内部関数を作成してください。
以下の関数が与えられています:
def func1(num):
if num > 0:
num += 2
return num
def func2(iter):
res = []
for el in iter:
res.append(func1(el))
return res
func1 が func2 の内部関数となるようにコードを書き直してください。