AD JB Toolbox 01

Python 강좌 / 위치·키워드 인수와 기본값 사용하기

함수 인수는 위치나 이름으로 전달할 수 있고 기본값으로 선택 항목을 만들 수 있습니다. 리스트 같은 변경 가능한 객체를 기본값으로 두면 호출 사이에 상태가 공유될 수 있으므로 주의해야 합니다.

인수 전달 순서와 읽기 쉬운 호출

위치 인수는 순서대로 매개변수에 연결되고 키워드 인수는 이름으로 연결됩니다. 같은 매개변수에 두 번 값을 주거나 키워드 인수 뒤에 일반 위치 인수를 넣으면 오류입니다. 선택지가 여러 개일 때 키워드로 의미를 적으면 호출부를 읽기 쉽습니다.

관련 동작과 지원 조건은 위치·키워드 인수와 기본값 사용하기 관련 공식 문서에서 확인할 수 있습니다.

매개변수 목록의 * 뒤에 오는 항목은 키워드 전용입니다. 아래 예제에서 currency는 이름을 써서 전달해야 하므로 단위가 무엇인지 호출부에 드러납니다.

전체 예제와 실행 결과

별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python arguments.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.

arguments.py 파일의 전체 내용입니다.

def format_expense(name, amount, *, currency="KRW"):
    return f"{name}: {amount:,} {currency}"

def append_name(name, names=None):
    if names is None:
        names = []
    names.append(name)
    return names

print(format_expense("lunch", 8000))
print(format_expense(amount=9000, name="dinner", currency="KRW"))
print(append_name("A"))
print(append_name("B"))

예상 결과는 다음과 같습니다.

lunch: 8,000 KRW
dinner: 9,000 KRW
['A']
['B']

기본값은 언제 만들어지나요?

기본값 표현식은 호출할 때마다 새로 평가되는 것이 아니라 함수 정의를 실행할 때 평가됩니다. def append_name(name, names=[])처럼 쓰면 같은 리스트가 재사용됩니다. None을 기본값으로 받고 함수 안에서 새 리스트를 만드는 형태가 일반적인 해결 방법입니다.

names가 빈 리스트일 때도 호출자가 전달한 목록을 쓰려면 if names is None으로 검사합니다. if not names라고 쓰면 빈 리스트를 새 리스트로 바꿔 호출자의 의도와 달라질 수 있습니다.

선택 항목과 잘못된 호출 검증하기

currency를 세 번째 위치 인수로 전달해 키워드 전용 규칙이 오류로 드러나는지 확인합니다. 또한 외부에서 names=[]를 만들고 append_name("A", names)를 호출하면 그 리스트 자체가 바뀌는지 확인하세요. 객체 변경 여부는 기본값 문제와 별도로 함수의 계약으로 밝혀야 합니다.

날짜나 현재 시각도 기본값에 직접 계산하면 정의 시점 값이 남을 수 있습니다. 호출마다 새 값이 필요하면 None을 받고 함수 본문에서 계산하는 방식을 사용합니다.

같은 카테고리의 다른 글
Python 강좌 / 숫자 자료형과 연산: 정수·실수·형 변환

Python 강좌 / 숫자 자료형과 연산: 정수·실수·형 변환

int·float·Decimal의 차이와 나눗셈·형 변환을 설명합니다. 음수와 십진 소수 예제로 금액 계산에서 정확도를 선택하는 방법을 확인합니다.

Python 강좌 / for·range·enumerate·zip으로 반복하기

Python 강좌 / for·range·enumerate·zip으로 반복하기

for·range·enumerate·zip의 용도를 비교합니다. 번호와 지출 항목을 함께 출력하며 범위의 끝 제외, zip의 길이 불일치와 반복 중 변경 문제를 확인합니다.

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

공식 Python Install Manager로 Windows 실행 환경을 준비합니다. 기존 설치 확인, 프로젝트용 가상환경 생성, 명령 충돌과 실행 경로 점검까지 설명합니다.

Python 강좌 / 비교·논리 연산자와 참·거짓 판단하기

Python 강좌 / 비교·논리 연산자와 참·거짓 판단하기

비교·논리 연산자와 참·거짓 변환을 설명합니다. and·or의 단락 평가, 0과 None의 차이, ==와 is의 용도를 예제로 확인합니다.

Python 강좌 / while·break·continue로 반복 제어하기

Python 강좌 / while·break·continue로 반복 제어하기

while의 종료 조건과 break·continue의 실행 범위를 설명합니다. 지출 입력 반복 예제로 빈 입력·음수·종료 문자를 처리하고 무한 반복 원인을 확인합니다.

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

집합의 중복 제거와 합집합·교집합·차집합을 익힙니다. 허용 분류 검증 예제로 순서·횟수 정보와 remove·discard의 차이를 확인합니다.

Python 강좌 / 가변 인수와 언패킹: *args·**kwargs

Python 강좌 / 가변 인수와 언패킹: *args·**kwargs

*args·**kwargs의 수집과 호출 시 언패킹을 비교합니다. 금액 합산과 옵션 출력 예제로 중복 인수, 문자열 펼치기와 인터페이스 설계 기준을 설명합니다.

Python 강좌 / 딕셔너리로 키와 값 관리하기

Python 강좌 / 딕셔너리로 키와 값 관리하기

딕셔너리의 키·값 접근과 항목 갱신을 설명합니다. 분류별 지출 집계 예제로 get·items·정렬과 필수 키 누락 처리의 차이를 확인합니다.

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

튜플 생성과 언패킹, 별표 수집과 값 교환을 익힙니다. 불변성의 범위와 항목 수 오류, 리스트·딕셔너리와의 선택 기준을 설명합니다.

Python 강좌 / 리스트·딕셔너리·집합 컴프리헨션 사용하기

Python 강좌 / 리스트·딕셔너리·집합 컴프리헨션 사용하기

리스트·딕셔너리·집합 컴프리헨션의 변환과 필터를 비교합니다. 중복 키, 빈 결과와 부수 효과를 확인하며 일반 반복문과의 선택 기준을 익힙니다.