1 minute read

본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.

6-1. 파이썬에서는 함수도 객체

파이썬은 모든 것을 객체로 처리한다.

참고로 클래스가 메소드와 변수로 구성된 코드 껍데기라면, 객체는 클래스의 코드가 작동되도록 영혼을 불어넣은 것이라 할 수 있다.

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

float 클래스에 소수점 이하 값이 있을 경우 True를 리턴하는 메소드가 있고, x는 코드 껍데기 뿐인 float 클래스가 작동되도록 하는 객체인 것이다.

파이썬은 함수도 객체로 처리한다.

def func1(n):
    return n
type(func1)
(결과) <class 'function'>

보다시피, func1이라는 함수는 ‘function’이라는 클래스의 객체인 것이다.

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

객체라면 다음 2가지를 수행할 수 있다.
1) 매개변수로 함수를 줄 수 있다.

def say1():
    print('안뇽?')

def caller(what):
    what()

caller(say1)
(결과) 안뇽?

2) 함수 안에 함수를 만들수 있다.

def power(n):
    def base(x):
        return x ** n
    return base

f2 = power(3) # x ** 3, f2에는 base 함수가 저장되고, base 함수가 리턴하는 값은 x ** 3 이 된다.
f2(4) # 4 ** 3
(결과) 64

6-2. 람다

만약 함수를 정의해서 함수를 변수안에 저장해보자.

def tellme(s):
    print(s)
tellmeagain = tellme
tellmeagain('안뇽?')
(결과) 안뇽?

저장은 했는데, 같은 기능을 하는 함수가 tellme, tellmeagain 2개가 생겨버렸다.
그냥 변수에 이름 없는 함수를 저장할 순 없을까?

이름 없는 함수! 그것은 바로 람다 함수 이다!

tellme = lambda s : print(s)
tellme('안뇽?')
(결과) 안뇽?

변수 2개도 설정할 수 있다.

tellme_twotimes = lambda s1, s2 : print(s1 + ' '+ s2)
tellme_twotimes('안뇽?', '뭐했어?)
(결과) 안뇽? 뭐했어?

마지막으로 람다 고오급 응용 코드를 작성하고 포스팅을 마친다. 앞에서 보였던 기능을 람다로 구현한 것이다.

def power(n):
    return lambda x: x ** n
f2 = power(3)
f2(4)
(결과) 64

Leave a comment