0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【python初学者】 クロージャー

Posted at

クロージャーとは

外側の変数を記憶した関数である

ex)

def outer(a,b):
    def inner():
        return a+b
    return inner
f = outer(1,2)
r = f()
print(r)

#print
#3

初めに

f = outer(1,2)

が実行されたときに

outer関数の引数には[1,2]が入る
そして、inner関数の

return a+b

にも[1,2]が入る
しかし、inner関数は実行されておらず、実行するための関数が返ってくる

試しに中身を見てみると

def outer(a,b):
    def inner():
        return a+b
    return inner
f = outer(1,2)
print(f)

#print
#<function outer.<locals>.inner at 0x00000248884AEB00>

確かに関数が返ってきている
まだ実行されていないinnerを実行してやると、3が返ってくるというものだ

使いどころ

ex)

def circle_area_func(pi):
    def circle_area(r):
        return pi*r*r
    return circle_area

cal1 = circle_area_func(3.14)
cal2 = circle_area_func(3.141592)

print(cal1(10))
print(cal2(10))

#print
#314.0
#314.1592

circle_area_funに引数を渡しておいて、実行しておく
のちにcircle_areaを実行する
便利かもしれない

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?