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이 출력
자신을 둘러싼 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의 값을 출력하며 정상적으로 동작한다.
클로저는 원 함수가 삭제되어도 자신의 스코프를 보존한다
클로저를 쓰는 이유는?