핵심정리

람다 표현식

람다 표현식은 간단한 식으로 함수를 만들 때 사용합니다. 특히 람다 표현식으로 만든 함수는 이름이 없어서 익명 함수라고 부르기도 합니다. 람다 표현식 자체를 호출하려면 람다 표현식을 ( )(괄호)로 묶은 뒤 다시 ( )를 붙이고 인수를 넣어서 호출합니다.

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 calc():
    total = 0
    def add(a, b):
        nonlocal total    # 바깥 함수의 지역 변수 total을 사용하겠다고 설정
        total = total + a + b

클로저

클로저는 함수를 둘러싼 환경(지역 변수, 코드 등)을 계속 유지하다가 함수를 호출할 때 다시 꺼내서 사용하는 함수를 뜻합니다. 그리고 클로저는 프로그램의 흐름을 변수에 저장할 수 있으며 내부 데이터를 숨기고 싶을 때 사용합니다.

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: calc 함수의 지역 변수 a, b를 사용하여 계산

클로저는 람다 표현식으로도 만들 수 있습니다.

def calc():
    a = 3
    b = 5
    return lambda x: a * x + b    # 람다 표현식을 반환

람다와 클로저

보통 클로저는 람다와 함께 사용하는 경우가 많아 둘을 혼동하기 쉽습니다. 람다는 이름이 없는 익명 함수를 뜻하고, 클로저는 함수를 둘러싼 환경을 유지했다가 나중에 다시 사용하는 함수를 뜻합니다.

최근 수정: 2017년 7월 4일, 화요일, 오전 10:57