02. function-extension
디폴트 매개변수
( Default Arguments Values , Default Parameter )
- 함수의 매개변수에 기본값을 지정해서 정의한 함수입니다.
- 함수를 호출할 때 인자값의 수가 고정되어 있지 않고 데이터를 한개, 두개 전달하는 함수도 있습니다.
이러한 함수에 사용되어 있는게 디폴트 매개변수 입니다.
- 호출부에서 넘어오는 인자값은 매개변수의 왼쪽에서부터 순서대로 받기 때문에, 디폴트 매개변수의 지정은 오른쪽에서부터 해야합니다.
def showMessage(str="hi"):
print(str)
showMessage("안녕하세요..")
showMessage()

def sum_func(x1, x2, x3=100):
result = 0
result = x1 + x2 + x3
return result
def display():
sum = 0
a, b, c = 10, 20, 30
sum = sum_func(a, b)
print("매개변수 2개 :", sum)
sum = sum_func(a, b, c)
print("매개변수 3개 :", sum)
display()

키워드 인수 ( keyword Arguments )
- 함수 호출시에 매개변수를 지정해서 값을 넘기는 방식입니다.
- 매개변수가 여러개인 함수를 호출할 때, 일반적으로 하나씩 순서대로 전달됩니다.
- 그러나 키워드 인수를 사용하면 순서에 상관없이 매개변수를 지정해서 값을 전달할 수 있습니다.
def showPrint(str):
print(str)
showPrint(str="안녕하세요")
print()

def member(name, grade="일반"):
print(f"{name} - {grade}")
member("userA")
member(grade="VIP", name="userB")

가변 인자
- 함수가 몇개의 인자를 받을지를 정하지 못했을 때 사용합니다.
- 가변인수를 받을떄는 * 을 붙여서 설정합니다.
def showData(*arg):
print(arg)
print(type(arg)) # 튜블로 값을 받아옴
for n in arg:
print(n)
print()
showData()

showData(1)

showData(1, 2, 6, 3)

def totalData(*arg):
print(arg)
result = 0
for n in arg:
result += n
return result
tot = totalData(10, 20)
print(f"합 : {tot}")

tot = totalData(1, 20, 5, 7)
print(f"합 : {tot}")

튜플, 리스트를 가변인자로 처리할 수 있습니다.
data_list = [ 1, 10, 100 ]
totalData(*data_list)

키워드 가변인자
- 가변인자 처럼 사용하되 'key=value' 의 쌍으로 사용합니다.
def keyFunc(**ka):
print(type(ka))
for key, value in ka.items():
print(f"{key} - {value}")
print()
keyFunc(a=1)

keyFunc(하나=1, 둘=2)

data_dict = {'일': '1', '이':2, '삼':3}
keyFunc(**data_dict)

익명 함수 ( 람다, lambda )
- 함수에 이름을 만들지 않고 임시적으로 사용할 함수로 만들어 쓰는 형태입니다.
- 사용
lambda 인자 : 실행 코드
v = lambda v: v+1
print(v(10))

datas = ['5', 4, '8', '9', 1, 7, '3', 3.4, '4.5', 5.2]
datas.sort()
print(datas)
- key 의 매개변수에 정렬기준을 float 으로 캐스팅해서 설정하는 람다함수 적용
datas.sort(key=lambda x: float(x))
print(datas)
