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 강좌 / 딕셔너리로 키와 값 관리하기

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

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

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

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

Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

리스트의 추가·수정·삭제와 정렬을 실행 예제로 확인합니다. sort와 sorted, 얕은 복사, 빈 목록과 반복 중 변경의 차이를 설명합니다.

Python 강좌 / Python이란? 특징과 활용 분야

Python 강좌 / Python이란? 특징과 활용 분야

Python의 역할과 활용 범위를 이해하고 소스 파일·터미널·인터프리터를 구분합니다. 간단한 합산 예제를 실행하며 강좌의 실습 방식을 익힐 수 있습니다.

Python 강좌 / 함수 정의하고 값 반환하기

Python 강좌 / 함수 정의하고 값 반환하기

def·매개변수·return으로 계산 함수를 작성합니다. 출력과 반환의 차이, 함수 책임과 입력 전제, 호출 오류의 확인 방법을 설명합니다.

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

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

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

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

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

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

Python 강좌 / 가상환경 만들기와 pip로 패키지 관리하기

Python 강좌 / 가상환경 만들기와 pip로 패키지 관리하기

venv로 프로젝트 환경을 분리하고 python -m pip로 패키지를 관리합니다. 활성화, 버전 기록, 재설치와 설치 환경 불일치 해결 기준을 익힙니다.

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

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

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

Python 강좌 / 변수·주석·입력과 출력으로 첫 프로그램 만들기

Python 강좌 / 변수·주석·입력과 출력으로 첫 프로그램 만들기

변수 대입과 주석, input·print의 역할을 익힙니다. 입력 문자열을 금액으로 변환하고 f-string으로 출력하며 잘못된 입력의 원인을 확인합니다.