Python入門 関数内関数、クロージャー、デコレーター

# 関数内関数
def outer(a, b):

   def plus(c, d):
       return c + d

   r1 = plus(a, b)
   r2 = plus(b, a)
   print(r1 + r2)

outer(1, 2)

# クロージャー
# def outer(a, b):
#
#     def inner():
#         return a + b
#
#     return inner
#
# f = outer(1, 2)
# r = f()
# print(r)

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

   return circle_area

ca1 = circle_area_func(3.14)
ca2 = circle_area_func(3.141592)

print(ca1(10))

print(ca2(10))

# デコレーター
def print_more(func):
   def wrapper(*args, **kwargs):
       print('func:', func.__name__)
       print('args:', args)
       print('kwargs:', kwargs)
       result = func(*args, **kwargs)
       print('result:',result)
       return result
   return wrapper

def print_info(func):
   def wrapper(*args, **kwargs):
       print('start')
       result = func(*args, **kwargs)
       print('end')
       return result
   return wrapper

@print_info
@print_more
def add_num(a, b):
   return a + b

r = add_num(10, 20)
print(r)

@print_info
def sub_num(a, b):
   return a - b

# f = print_info(add_num)
# r = f(10, 20)
# print(r)

# print('start')
# r = add_num(10, 20)
# print('end')
#
# print(r)

この記事が気に入ったらサポートをしてみませんか?