Python inner functions: what are they good for?
Encapsulation
외부에서 호출되지 않도록 scope를 제한할 때 사용한다.
Keepin' it DRY(Don't repeat yourself)
함수 내에서의 중복 제거를 위해 inner function을 만들 수 있다.
Closures and Factory functions
inner function을 사용하는 가장 중요한 이유. closure를 사용하려면 inner function이 있어야 한다.
closure란?
inner function이 상태를 기억하도록 만든다. closure는 지역 변수를 stack 내에 가둬 값이 유지되도록 한다. 이 특성을 이용해 다른 함수를 반환하는 factory function을 만들 수 있다.
def generate_power(number):
"""
Examples of use:
>>> raise_two = generate_power(2)
>>> raise_three = generate_power(3)
>>> print(raise_two(7))
128
>>> print(raise_three(5))
243
"""
# Define the inner function ...
def nth_power(power):
return number ** power
# ... that is returned by the factory function.
return nth_power
Syntactic sugar
inner function을 만들 때 decorator를 이용하기도 한다. 대부분의 decorated function은, decorator가 function을 인자로 받아 새로운 function을 반환하는 factory function이다.
def generate_power(exponent):
def decorator(f):
def inner(*args):
result = f(*args)
return exponent**result
return inner
return decorator
@generate_power(2)
def raise_two(n):
return n
print(raise_two(7))
@generate_power(3)
def raise_three(n):
return n
print(raise_two(5))
이런식으로 사용하면, 원하는 함수에 기능을 추가하여 새로운 함수를 만들 수 있다.
위와 같은 nested function 대신 데코레이터를 클래스로 정의하는 방법도 있다.
import datetime
class DatetimeDecorator:
def __init__(self, f):
self.func = f
def __call__(self, *args, **kwargs):
print datetime.datetime.now()
self.func(*args, **kwargs)
print datetime.datetime.now()
class MainClass:
@DatetimeDecorator
def main_function_1():
print "MAIN FUNCTION 1 START"
@DatetimeDecorator
def main_function_2():
print "MAIN FUNCTION 2 START"
@DatetimeDecorator
def main_function_3():
print "MAIN FUNCTION 3 START"
my = MainClass()
my.main_function_1()
my.main_function_2()
my.main_function_3()
# 출처: https://bluese05.tistory.com/30 [ㅍㅍㅋㄷ]
참고: https://realpython.com/inner-functions-what-are-they-good-for/
Author And Source
이 문제에 관하여(Python inner functions: what are they good for?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hamdoe/Python-inner-functions-what-are-they-good-for저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)