# 함수의 구조
'''
def 함수이름([인수, ...]):            # 함수의 인수는 필요 없으면 생략할 수 있다.
    함수가 실행할 문장
    ...
    [return 함수를 실행한 결과 값]     # 함수를 실행한 결과가 없다면 생략할 수 있다.
'''


# 함수의 실행 순서
# 프로그램에서 함수가 호출되면 호출된 함수로 제어가 넘어간다. => 복귀 주소는 스택에 저장된다.
# 호출된 함수에서 정의한 기능을 모두 실행하거나 return 명령을 만나면 함수가 종료되고 함수를 호출한 문장으로 돌아간다.
# return 뒤에 값이 있으면 값을 가지고 돌아가고 return 값이 없으면 None 을 가지고 돌아간다.
# 가장 일반적인 함수의 모양
# a, b 2개의 데이터를 인수로 넘겨받아 덧셈을 실행한 후 결과를 return 하는 함수
def add(a, b):
    print('add(a, b) 함수가 실행됩니다.')
    result = a + b
    a = 999
    print('가인수 a : {}'.format(a))
    return result


# 실인수와 가인수의 이름은 반드시 같아야 할 필요는 없지만 함수를 호출할 때 인수의 개수는 반드시 같아야 한다. => 예외적으로 디폴트 인수를 사용하면 달라도 된다.
# 실인수와 가인수는 독립된 메모리 공간을 사용하기 때문에 가인수의 값이 변경되더라도 실인수의 값은 변경되지 않는다.
a, b = map(int, input('정수 2개를 입력하세요 : ').split())
print(add(a, b))
print('실인수 a : {}'.format(a))
