핵심 정리
람다 표현식
람다 표현식은 간단한 식으로 함수를 만들 때 사용합니다. 특히 람다 표현식으로 만든 함수는 이름이 없어서 익명 함수라고 부르기도 합니다. 람다 표현식 자체를 호출하려면 람다 표현식을 ( )(괄호)로 묶은 뒤 다시 ( )를 붙이고 인수를 넣어서 호출합니다.
lambda 매개변수1, 매개변수2: 반환값 # 람다 표현식으로 함수를 만듦 (lambda 매개변수1, 매개변수2: 반환값)(인수1, 인수2) # 람다 표현식 자체를 호출 lambda 매개변수1, 매개변수2: 식1 if 조건식 else 식2 # 람다 표현식에서 조건부 표현식 사용 lambda x: str(x) if x % 3 == 0 else x lambda 매개변수1, 매개변수2: 식1 if 조건식1 else 식2 if 조건식2 else 식3 # if를 여러 개 사용 lambda x: str(x) if x == 1 else float(x) if x == 2 else x + 10
변수의 사용 범위
전역 변수는 스크립트 전체에서 접근할 수 있으며 지역 변수는 해당 함수 안에서만 접근할 수 있습니다. 만약 함수 안에서 전역 변수를 사용하려면 global에 변수 이름을 지정해줍니다.
x = 10 # 전역 변수 def foo(): global x # 전역 변수 x를 사용하겠다고 설정 y = 10 # foo의 지역 변수
만약 전역 변수가 없을 때 함수 안에서 global을 사용하면 해당 변수는 전역 변수가 됩니다.
함수 안에서 함수 사용하기
파이썬에서는 def로 함수를 만들고 다시 def로 함수를 만들 수 있습니다.
def 함수이름1(): 코드 def 함수이름2(): 코드
함수 안에 함수를 만들었을 때 안쪽 함수에서 바깥쪽 함수의 지역 변수를 변경하려면 nonlocal에 변수 이름을 지정해줍니다.
def A(): x = 10 # A의 지역 변수 x def B(): nonlocal x # 현재 함수에서 바깥쪽에 있는 지역 변수를 사용 x = 20 # A의 지역 변수 x에 20 할당
클로저
클로저는 함수를 둘러싼 환경(지역 변수, 코드 등)을 계속 유지하다가 함수를 호출할 때 다시 꺼내서 사용하는 함수를 뜻합니다. 따라서 클로저는 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용합니다. 또한, 클로저에 속한 지역 변수는 바깥에서 직접 접근할 수 없으므로 데이터를 숨기고 싶을 때 활용합니다.
def calc(): # calc 함수 안에 mul_add 함수를 만듦 a = 3 b = 5 def mul_add(x): return a * x + b # 함수 바깥쪽에 있는 지역 변수 a, b를 사용하여 계산 return mul_add # mul_add 함수를 반환 c = calc() # c에 저장된 함수가 클로저 print(c(1), c(2), c(3), c(4), c(5)) # 8 11 14 17 20
클로저는 람다 표현식으로도 만들 수 있습니다.
def calc(): a = 3 b = 5 return lambda x: a * x + b # 람다 표현식을 반환
람다와 클로저
보통 클로저는 람다와 함께 사용하는 경우가 많아 둘을 혼동하기 쉽습니다. 람다는 이름이 없는 익명 함수를 뜻하고, 클로저는 함수를 둘러싼 환경을 유지했다가 나중에 다시 사용하는 함수를 뜻합니다.