Python: Closure

BY Jung·2021년 12월 6일
0
post-custom-banner

중첩함수 예시

def pop(list):
	def get_last_item(my_list):
    	return my_list[len(list)-1]
    list.remove(get_last_item(list))
    return list

리스트의 마지막 요소를 출력 + 동일한 요소를 제거 = pop함수 로직

일급 객체

list, str, int 등 함수의 인자로 전달되거나, 반환값이 되거나, 수정 및 할당될 수 있는 자료타입

파이썬에서는 함수도 1급 객체가 될 수 있다
예시)

def add(a, b):
	return a+b
def execute(func, *args):
	return func(*args)
some_letter= add
>> execute(some_letter, 3, 5)
#출력결과 8나옴

execute함수의 인자로 some_letter가 전달되었는데,
some_letter 는 add였고,
add(3,5)의 결과로 8이 출력

Closure

자신을 둘러싼 Scope의 상태값을 기억하는 함수

def timeS_multiply(x):
	def multiply(y):
    	return x*y
    return multiply
times_3 = times_multiply(3)
times_4 = times_multiply(4)
times_3(5) #15
times_4(5) #20

클로저인 multiply는 상위 스코프의 x값을 참조해 times_multiply로 반환된다. 그 결과 times_3(5), times_4(5)는 각각 35, 45의 값을 최종적으로 곱해 반환한다

이때 del(times_multiply)로 밖의 외장함수를 메모리 상에서 삭제한다면?

times_3(5)

는 15의 값을 출력하며 정상적으로 동작한다.
클로저는 원 함수가 삭제되어도 자신의 스코프를 보존한다

클로저를 쓰는 이유는?

  • 관리와 책임의 명확한 구분
  • 변수의 충돌방지
  • 사용환경에 따라 내부구조 조정
profile
Slow and steady wins the race
post-custom-banner

0개의 댓글