Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はPythonの関数について、初心者がちょっと見落としがちがち?な事項についての解説です。それは関数がネストされている(入れ子構造になっている)場合に、外側の関数の引数の情報が、内側の関数へと自動的に渡されるというものです。
関数の中に関数があるような、入れ子の構造になっている状態を関数のネストと呼びます。この関数のネスト(または、ネストされた関数)については、以下の記事で説明してあるので読んで見てください。
さて今回の本題に入りましょう。まず以下のコードを見て下さい。
def f1(a, b):
def f11(c, d):
return a, b, c, d
return f11
f1(0,1) #resutl: <function f1.<locals>.f11 at 〜>
f1(0,1)(2,3) #result: (0, 1, 2, 3)
関数の中に関数があるパターンです。
まず、
f1(0,1)
この時点で外側の関数f1は、その引数a,bにはそれぞれ0と1が代入されて実行され、f11という関数を返します。
今回のコードは、関数f11そのものを返すだけであって、関数f11の実行結果を返すコードではない点に注意してください。f1の実行結果と、f11の実行結果とは別物です。
それゆえf1(0, 1)の実行結果は、「function f1.<locals>.f11 at 〜>」というものになります。
次に、
f1(0,1)(2,3)
この部分ですが、上述のようにf1(0, 1)の実行結果はf11という関数なので、結局、
f11(2, 3)
ということになります。
それゆえ、f11の引数のcとdにそれぞれ、2と3が代入されて、f11が実行され、
return a, b, c, d
こうして、変数 a, b, c, dの値がそれぞれ表示されます。
その結果、
(0, 1, 2, 3)
となっていますが、外側の関数f1の引数情報だったa, bの情報がそのまま表示されています。
つまり外側の関数の引数情報が、なにもしなくても自動的に内部の関数へ引き継がれていることがわかります。