9.1 매개변수 vs 인수
초보자들은 "매개변수"와 "인수"라는 용어를 혼동하는 경우가 많지만, 이들 사이의 차이는 함수형 프로그래밍을 이해하는 데 중요해.
매개변수는 함수 정의에 나열된 변수들이야. 함수가 전달받는 값을 참조하기 위해 사용하는 이름들을 의미하지. 함수의 매개변수는 함수 본문에서 사용할 값의 "자리표시자" 역할을 해. 함수를 정의할 때, 매개변수를 설명하게 돼.
def print_info(name, age): # name과 age는 매개변수야
print(f"Name: {name}, Age: {age}")
인수는 함수가 호출될 때 전달되는 구체적인 값이나 데이터야. 인수는 함수가 실행될 때 매개변수의 자리에 대입돼. 인수는 상수, 변수, 표현식 또는 다른 함수의 결과일 수 있어.
print_info("Alice", 30) # "Alice"와 30은 인수야
인수의 종류
- 위치 인수: 매개변수가 정의된 순서대로 값이 전달되지.
- 키워드 인수: 매개변수 이름을 사용하여 함수에 전달하는 인수로, 위치 인수 뒤에 어떤 순서로도 나열될 수 있어.
- 기본값 인수: 함수 정의 시 매개변수에 기본값을 할당할 수 있지.
위치 인수는 이미 사용하고 있고, 키워드 인수와 기본값 인수는 다음 강의에서 다뤄볼게.
Python에서 매개변수와 인수의 차이를 이해하면 함수가 데이터를 수신하고 처리하는 방법을 이해하는 데 도움이 돼. 이 차이는 다양한 호출 조건에 맞게 쉽게 조정할 수 있는 유연한 함수를 만드는 데 중요해, 이로 인해 코드가 더 모듈화되고 재사용 가능하게 돼.
9.2 기본값
Python의 기본값 인수는 함수가 하나 이상의 매개변수에 대해 미리 정의된 값을 지정할 수 있는 메커니즘이야. 이 기능은 함수 호출 시 매번 모든 인수를 명시적으로 지정할 필요 없이 더 편리하고 유연하게 만들어 줘.
기본값 인수 정의
기본값 인수는 함수 정의에서 매개변수를 선언할 때, 함수 호출 시 인수가 전달되지 않을 경우 사용할 값
으로 설정해:
def print_info(name, company='Unknown'):
print(f"Name: {name}, Company: {company}")
이 예시에서 company
는 기본값으로 'Unknown'을 가지고 있어.
- 함수 호출 간소화: 매개변수가 많은 함수는 가장 중요한 인수만 지정해서 호출할 수 있어.
- 유연성: 코드 변경 없이 다양한 사용 시나리오에 맞게 함수가 조정될 수 있어.
- 코드의 가독성: 기본값의 명시적인 지정은 코드 자체를 문서화해줘.
중요한 사항
불변성: 인수의 기본값은 숫자, 문자열 또는 튜플과 같은 불변 데이터 유형이어야 해. 변경 가능한 유형(예: 리스트 또는 딕셔너리)을 사용하면 이 객체에서의 변경 사항이 함수 호출 간에 계속 유지되기 때문에 원치 않는 부작용이 발생할 수 있어.
인수의 순서: 기본값이 있는 매개변수는 기본값이 없는 매개변수 뒤에 따라야 해.
또 다른 예시:
def create_user(username, is_admin=False):
if is_admin:
print(f"User {username} is an admin.")
else:
print(f"User {username} is a regular user.")
create_user("Alice") # is_admin == False
create_user("Bob", is_admin=True) # is_admin == True
create_user("Karl", True) # is_admin == True
위는 기본값 인수를 사용한 함수 호출의 3가지 방법을 보여줘: 각각 모두 작동해.
9.3 이름으로 매개변수 전달하기
함수에 매개변수를 이름으로 전달하면 어떤 값이 어떤 인수에 전달되는지를 더 명확하게 할 수 있어, 코드의 가독성을 높이고 인수의 순서 오류와 관련된 가능성을 줄일 수 있어.
이름으로 매개변수 값을 전달하려면, 함수 호출 시 특정 매개변수에 값을 할당해야 해:
함수(매개변수1 = 값, 매개변수2 = 값)
이 방법은 매개변수가 많이 있거나 기본값이 있는 매개변수를 가진 함수에서 작업할 때 특히 유용해.
이름으로 매개변수 전달의 장점
- 명확성과 가독성: 매개변수 이름을 지정하여 호출하면 다른 개발자에게 또는 자신의 오래된 코드로 돌아올 때 코드가 더 쉽게 이해돼.
- 유연성: 매개변수는 어떤 순서로든 전달할 수 있어, 이는 함수에 많은 매개변수가 있을 때 유용하지.
- 오류 방지: 함수의 매개변수 순서를 기억할 필요가 없어, 값 전달의 잘못된 방식과 관련된 오류 가능성을 줄여줘.
사용 예시
def create_profile(name, age, job):
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Job: {job}")
create_profile(name = "John", age = 28, job = "Developer")
이 예시에서 매개변수는 순서와 상관없이 전달되지만, 각각 명시적으로 값이 할당되어, 함수 호출이 더 유연하고 이해하기 쉽게 돼.
예시 2:
참고로, 이전에 이름으로 매개변수 전달을 이미 접해보았어. print()
함수에서 말이야, 기억나?
특징과 제한사항
이름으로 매개변수를 전달할 때는 함수 정의에 이름이 없는 매개변수 다음에 와야 해.
함수 호출 시 동일한 매개변수 이름을 두 번 이상 사용할 수 없어.
이름으로 매개변수 전달은 Python의 강력한 기능으로, 특히 많은 인수나 선택적 값을 가진 함수를 사용할 때 코드가 더 안전하고 이해하기 쉬워져.
GO TO FULL VERSION