본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 06. 객체처럼 다뤄지는 함수 그리고 람다

출처 : 윤성우의 열혈 파이썬 : 중급

06. 객체처럼 다뤄지는 함수 그리고 람다

파이썬에서는 함수도 객체

def func1(n):
    return n

def func2():
    print("hello")

type(func1)     # <class 'function1'>
type(func2)     # <class 'function2'>


def say1():
    print('hello')

def say2():
    print('hi-')

def caller(fct):
    fct()

caller(say1)    # 매개변수에 함수를 전달
caller(say2)


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
  • 함수를 정의하면 파이썬은 그 함수의 내용을 기반으로 function 클래스의 객체를 생성
  • '매개변수에 함수를 전달할 수 있음'
  • 함수 내에서 함수를 만들어 이를 반환할 수 있다
  • 이는 함수도 객체이기 때문이다

람다

def show(s):
    print(s)

ref = show
ref('hi~')      # hi~


ref = lambda s: print(s)
ref('oh~')      # oh~
  • 이름 없는 함수
  • lambda args: expression
f1 = lambda n1, n2: n1 + n2
f1(3, 4)        # 7

f2 = lambda s: len(s)
f2('simple')    # 6

f3 = lambda : print('yes~')
f3()            # yes~

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

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