Function
01 Sep 2019 | Pythonaskcompany에서 강의(함수 / 파이썬 차근차근 시작하기)를 들으며 정리한 내용입니다.
함수
가변인자, 익명함수 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 입니다.