[Python] 함수, 람다

1 분 소요

파이썬에서는 함수도 객체

파이썬은 모든 것을 객체로 처리한다. 심지어 정수나 실수도 객체이다.

>>>  x = 3.0
>>> type(x)
<class 'float'>
>>> x.is_integer() # 소수점 이하에 값이 있는지 묻는 메소드
True

변수 x를 대상으로 is_integer메소드를 호출하는데 이는 x에 담긴 실수 3.0이 객체라는 증거이다.

>>> def func1(n):
        return n
>>> def func2():
        print("hello")
>>> type(func1)
<class 'function'>
>>> type(func2)
<class 'function'>
>>> def caller(fct):
        fct() # fct를 통해 전달된 함수를 호출
>>> caller(func2)
hello

함수는 ‘function’이라는 클래스의 객체이다. 즉 함수를 정의하면 파이썬은 그 함수의 내용을 기반으로 function 클래스의 객체를 생성한다.

함수 = 객체 이므로 매개변수에 함수를 전달할 수 있다는 것을 의미한다.

>>> def fct_fac(n):
        def exp(x):
            return x**n
        return exp

>>> f2 = fct_fac(2)
>>> f3 = fct_fac(3)
>>> f2(4)
16
>>> f3(4)
64

함수내에 함수를 만들어 이를 반환할 수도 있다.

람다

함수를 만들기 위해서는 함수 이름을 가져야 하는데, 함수의 이름이 크게 의미를 갖지 않는 경우도 있다. 바로 위에 코드를 보면 exp 함수가 그렇다. 그저 반환하기 위한 용도로 사용했기 때문이다. 이름 없는 함수의 정의 방법이 바로 람다다.

>>> def show(s):
        print(s)

>>> ref = show  # show함수를 ref가 참조함. 함수가 객체라서 가능.
>>> ref('hi~')
hi~
>>> ref = lambda s: print(s)
>>> ref('oh~')
oh~
>>> f1 =  lambda n1, n2: n1+n2 # 매개변수가 두개 이상인 람다식 정의
>>> f1(3,4)
7
>>> f2 = lambda s: len(s) # 람다식에서 함수 호출하기
>>> f2('simple')
6
>>> f3 = lambda : print('yes~') # 매개변수 없는 람다식
>>> f3()
yes~

이름 없이 만들어진 함수를 ‘람다 함수’ 또는 ‘람다식(lambda expression)’ 또는 ‘람다’라고 한다.

람다 기본 구조 : lambda args: expression

매개변수 선언은 args에 함수의 몸체 즉 내용은 expression에 두면 이름 없는 함수가 만들어져 반환된다.

>>> def fct_fac(n):
        return lambda x: x**n

>>> f2 = fct_fac(2)
>>> f3 = fct_fac(3)
>>> f2(4)
16
>>> f3(4)
64

람다식을 이용하면 간단하게 코드를 작성할 수 있다.