# 프로그램 목적: 디폴트인수와 키워드인수 -> 매우 중요!

# 1) 디폴트인수 -> 인자의 순서에 따라 대입됨!
def add(a=0, b=0):  # a와 b에 디폴트인수로 0을 설정
    result = a + b  # 값이 전달되지 않은 경우 0을 초기값으로 넣어줌 -> 사용자 입력오류 방지
    return result
x = 10
y = 20
r1 = add(x, y)  # 10 + 20 = 30
r2 = add(x)  # 10 + 0 = 10
r3 = add(y)  # 20 + 0 = 20 -> 여기에서 키워드인수 방식과 차이!
r4 = add()  # 0 + 0 = 0
print(r1, r2, r3, r4)
# 인자가 미전달시 디폴트인수가 들어감 -> 왼쪽부터 채워나감
# 주의) def add(a=0, b) -> 문법적오류: 디폴트인수는 뒤부터 설정해야 함!
# 주의) def add(a, b=0) -> 문법적오류 아님!

# 2) 키워드인수 -> 인수의 명칭에 따라 대입됨! (순서는 중요치 않음)
def add(a, b):
    result = (a * 2) + (b * 3)
    return result
x = 1
y = 2
r1 = add(b=50, a=1)  # 결과값: 152 -> 키워드인수 방식
r2 = add(50, 1)  # 결과값: 103 -> 디폴트인수 방식
print(r1, '!=', r2)  # 주의) add(50, 1)과 add(b=50, a=1)과 다름!
# 포지션에 의한 인자전달, 키워드에 의한 인자전달의 차이 명확히 이해할 것!

# 3) 디폴트인수 vs 키워드인수
def add(a=0, b=0):
    result = a + b
    return result
r = add(b=50)  # a는 디폴트인수 0이 들어가고, b는 키워드인수 50이 들어감
print(r)  # 결과값: 0 + 50 = 50

def add(a, b=0):
    result = a + b
    return result
r = add(a=100)  # a는 키워드인수 100이 들어가고, b는 디폴트인수 0이 들어감
print(r)  # 결과값: 100 + 0 = 100