[TIL]Python. 중첩함수, Decorator

여주링·2020년 11월 25일
0

Python

목록 보기
9/15

중첩함수/Nested Function

함수도 함수안에 중첩되어 선언될 수 있다. 중첩함수 혹은 내부 함수는 는 상위 부모 함수 안에서만 호출 가능.

중첩함수 사용이유

  1. 가독성 : 효과적으로 코드를 관리하고 가독성을 높이기 위함
  2. Closure : 부모 함수의 변수는 직접적인 접근이 불가능 하지만 부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다 -> 어떠한 정보를 기반으로 연산을 실행하고 싶지만 기반이 되는 정보는 접근을 제한하여 노출이 되거나 수정이 되지 못하게 하고 싶을때 사용

Decorator

Decorator란?

  • 어떤 함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수.
  • 어떤 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용
  • 말그대로 다른 함수를 꾸며주는 함수

예시
삼성전자주식을 사라는 계시를 유료회원에게만 알려주려고 한다.

def jackpot_information():
    return "계시가 내려졌습니다. 삼성전자를 사세요!"

def paid_user():
    return True

if 사용시

if paid_user():
    jackpot_information()

깔끔해 보이지만 이 경우 jackpot_information 함수가 호출 될때 paid_user가 무조건 먼저 호출 되어야 하는데, 이 연결고리를 잊어먹을 확률이 있다는 것

이럴 경우

@is_paid_user
def jackpot_stock_information():
    return "계시가 내려졌습니다. 삼성전자를 사세요!"

is_paid_user 함수가 골뱅이 마크 (@) 와 함께 달려있는것을 볼 수 있음!

Decorator구현 방법

Decorator로 장식할 수 있는 함수는 중첩 함수(nested function)을 리턴(return) 하는 함수만 가능

Decorator : chain of functions
func1 => func2 => fun3 => ... =>funcN

만일 다음 함수를 리턴하지 않고 다른 값을 리턴해버리면 그 다음 함수로 넘어가지 못하고 그냥 함수 실행이 종료됨. 따라서 decorator 함수는 그 다음 함수를 리턴해 주어야 한다.

profile
🌱Backend Developer👩‍💻

0개의 댓글