[Python] 6. 객체처럼 다뤄지는 함수 그리고 람다
본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.
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