1. TOP
  2. プログラム
  3. ソフト
  4. python
  5. 関数内関数

関数内関数

2019-04-29_161333_GX1

関数を

ほかの関数の中で定義することができる。

>>>def outer(a, b):
>>> def inner(c, d):
>>> return c + d
>>> return inner(a, b)


>>>print(outer(4, 7))

11

関数内関数は、ループやコードの重複を避けるために役に立つ
複数回実行される複雑な処理をほかの関数で実行するのである。次の
関数内関数は、引数にテキストを追加する


>>>def knights(saying):
>>> def inner(quote):
>>> return "We are the knights who say: '%s'" %quote
>>> return inner(saying)

>>>print(knights('Mi!'))


We are the knights who say: 'Mi!'

クロージャー

関数内関数は、クロージャとして機能する。クロジャーとは、他の関数
によって動的に生成される関数で、その関数の外で作られた変数の値を
覚えておいたり、変えたりすることができる。

次の例は先ほどの kと同じ knights() と同じものをつくる名前を
knights2()にして、inner()関数は、inner2()というクロージャー
にする、違いをまとめると ◎inner2()は、引数を要求せず、外側の関数に対するsaying引数を
直接使う
◎knights2()は、inner2()を呼び出すのではなく、その関数名を
を返す。

>>>def knights2(saying):
>>> def inner2():
>>> return "We are the knights who say: '%s'" %saying
>>> return inner2

inner2()関数は、knights2に渡されたsayingの値を知っており、覚えて
いる。return inner2という行は、このinner2関数のために専用のコピー
を返す(しかし、呼び出さない)。innner2は動的に作成された関数であ
り、どのように作成されたかを覚えている。これがすなわち
「クロジャー」である。
異なる引数を使って、knights2を2回よびだしてみよう。

>>>a = knights2('Duck')
>>>b = knights2('Hasenpfeffer')


>>>print(a())
>>>print(b())


We are the knights who say: 'Duck'
We are the knights who say: 'Hasenpfeffer'