풀스택 개발 공부로그

Function

|

askcompany에서 강의(함수 / 파이썬 차근차근 시작하기)를 들으며 정리한 내용입니다.

함수

가변인자, 익명함수 1급객체와 1급함수/클래스 고차함수

가변인자

1. packing

파이썬 함수에서 여러개의 인자를 받을 때 몇개를 받을지는 모르지만 여러개를 받고싶을 때

def func(*colors):
    for color in colors:
        print(color)

이렇게 해주면 됩니다. 0개도 가능합니다. 0개이상의 인자를 받고싶을때 사용하시면 됩니다. 하지만 2개이상 받고싶다고 한다면

def func(color1, color2, *colors):
    for color in colors:
        print(color)

이렇게 써주시면 됩니다.

2. unpacking

반대로 이번엔 인자로 전달해주는 경우에 대해서 알아보겠습니다.

colors = [ 'red', 'green', 'blue' ]
def func(colors): #이렇게하면 리스트가 인자로 들어가버린다. 
	pass
def func(*colors): #이렇게하면 unpacking되어 3개의 인자가 전달이 된다!
	pass 

앞서 소개한 packing, unpacking에서는 '*'가 한개가 붙어있지만 이번에는 '*'가 2개입니다. 이는 dict를 받습니다. 사용법은 위와 같습니다.

def item(mac = 0, gram = 1, samsung = 2):
    pass

또는

dict = { 'mac' : 0, 'gram' : 1, 'samsung' : 2}
def item(**dict):
    pass
dict = { 'mac' : 0, 'gram' : 1, 'samsung' : 2}
def item(dict):
    pass

이거랑은 다릅니다.

lambda함수에 대해서

lambda x, y : x + y 

여기서 : (colon) 앞에 있는 x, y는 인자를 받을 때 작성해주는 부분이고, 콜론(:) 뒤에는 어떤 연산을 하고 반환할건지 나타냅니다 익숙한 코드로 표현해보면

def add(x, y)
	return x + y 

와 완전히 동일합니다.

앞에 배운것을 응용해보면

lambda *args : sum(args)

1급 객체/함수 여기서 1급은 우리가 중고등학교 때 배우는 1차 함수에서 1차와 비슷하게 생각하시면 될것같습니다. 이와같은 맥락에서 상대적인 개념으로 고차함수도 있습니다.

먼저 1급 함수/클래스의 특징은

  • 런타임에 생성가능
  • 변수에 할당가능
  • 인자나 리턴값으로 전달 가능 입니다.
fun_add = lambda x, y : x + y
fun_sum = fun_add

def make_func(fn, x, y):
	return fn(x, y)

def make_func((lambda x, y : x + y), x, y):
	return fn(x, y)

고차함수

다른 함수를 생산하거나 사용하는 함수입니다. 다시말해서 함수를 인자로 받거나, 함수를 반환하는 함수라고도 할 수 있습니다.

def base_calculator(base):
	wrap = lambda x, y : x + y + base
	return wrap
calc10 = base_calculator(10)
calc10(1, 2)

결과는 13 입니다.