TIL48. Nested Function (중첩 함수) & Decorator

Jaeyeon·2021년 3월 18일
0
post-thumbnail

Nested Function

양식

def parent_function():					# 1
    def child_function():				# 3
        print("this is a child function")		# 4
    child_function() 					# 2
print(parent_function())				# 5

출력값 : "this is a child function"

중첩함수(nested function) 혹은 내부 함수는 는 상위 부모 함수 안에서만 호출 가능합니다.
부모 함수를 벗어나서 호출될 수 없습니다.

nested function을 쓰는 이유

1. 가독성

  • 함수 안의 코드 중 반복되는 코드가 있다면 중첩함수로 선언하면
    부모함수의 코드를 효과적으로 관리하고 가독성을 높일 수 있습니다

2. Closure

  • Clouser의 사전적 의미는 폐쇄입니다.
    파이썬에서 사용하는 closure도 어떤 것을 외부로부터 격리해 사용한다는 느낌이 더 큽니다.
  1. 중첩 함수가 부모 함수의 변수나 정보를 중첩 함수 내에서 사용한다.

  2. 부모 함수는 리턴값으로 중첩 함수를 리턴한다.

  3. 부모 함수에서 리턴 했으므로 부모 함수의 변수는 직접적인 접근이 불가능 하지만
    부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다.

아래 nested function의 예를 들어보겠다.

def generate_power(base_number):
    def nth_power(power):
        return base_number ** power
 
    return nth_power
 
a = generate_power(2)		# a가 먼저 부모 def에 접근하고 2를 입력시킨다.
a(7)				# 자식 def에 들어가 2**7을 성립시킨다.
> 128
a(10)
> 1024
 
b = generate_power(7)
b(3)
> 343
b(5)
> 16907

Decorator

Decorator가 무엇인가?

  • Decorator는 장식 혹은 장식하는 사람이라는 뜻이 있습니다.
    파이썬에서는 함수를 장식하는 도구 정도로 설명할 수 있습니다.

Decorator는 어떻게 쓰는거지?

Decorator 예제

def welcome_decorator(func):			# 4 def greeting()을 통째로 func에 대입
    def wrapper():				# 6 래퍼 정의
        return func() + "welcome to WECODE!"	# 7 func()와 문자열 합체
    return wrapper				# 5 래퍼를 반환시켜라

@welcome_decorator				# 1
def greeting():					# 2
    return "Hello, "				# 3

print(greeting())				# 8

결과값은
Hello, welcome to WECODE! 출력

profile
생각하는 개발자 되기

0개의 댓글