11.1 무한한 수의 매개변수
Python에서는 함수가 무한한 수의 매개변수를 받을 수 있도록 만들 수 있어.
*args
를 사용하면 일반 매개변수, **kwargs
를 사용하면
이름으로 지정된 매개변수를 전달할 수 있지.
*args
사용법
*args
는 함수가 임의의 수의 위치 인수를 받아서 튜플로 처리할 수 있게 해줘.
사용 예시:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # 1, apple 그리고 True를 출력해.
args
변수는 함수 호출 시 전달된 모든 매개변수를 담은 튜플이 될 거야.
**kwargs
사용법
**kwargs
는 *args
와 비슷하게 작동하지만, 이름으로 제공된 매개변수를 딕셔너리 형태로 받아.
이를 통해 함수는 어떤 수의 명명된 인수도 받을 수 있어:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # fruit: apple 그리고 number: 1를 출력해.
이런 메커니즘 덕분에 함수가 매우 유연해지고, 매개변수 개수를 미리 알 수 없는 API 개발이나 이벤트 처리 함수에 유용해.
이 둘을 더 자세히 살펴보겠지만, Python 내의 함수에서 전달받은 모든 인수에 쉽게 접근할 수 있다는 걸 알면 좋겠어. 그리고 원하는 것은 무엇이든 전달할 수 있어.
11.2 타입 명시
알다시피, Python 변수에는 미리 지정된 타입이 없어. 어떤 타입의 값이든 변수에 할당할 수 있고, 다음 줄에서 새로운 타입의 값을 할당할 수도 있어.
작은 프로그램에서는 매우 편리하지만, 큰 프로그램에서는 그렇지 않아. 프로그램이 매우 커지고 함수가 수천 개가 될 때, 어떤 데이터를 어떤 순서로 전달해야 할지 프로그래머가 기억할 수 없어.
정적 타입 언어에서는 IDE가 프로그래머에게 어떤 매개변수와 타입을 함수 호출 시 전달해야 하는지 알려줘. 하지만 Python은 동적 타입 언어라 그런 도움을 받을 수 없어.
그래서 Python 개발자들이 type hinting
이라는 걸 생각해냈어.
변수 타입과 비슷하지만, 제한이 없는 권고사항 같은 거야.
타입 명시는 Python 3.5에서 도입되었고, PEP 484 표준 덕분에 인기를 얻었어. 프로그래머가 변수, 인수, 함수의 반환값에 예상되는 타입을 지정할 수 있는 메커니즘이지.
Python은 여전히 동적 타입 언어로 남아 있지만, 타입 명시는 명확성을 증가시키고 정적 타입 검사를 지원해. 타입 명시 예시:
def add_numbers(a: int, b: int) -> int:
return a + b
변수의 타입은 콜론을 통해 지정되고, 함수의 반환값 타입은 화살표를 통해 지정돼.
타입 명시가 주는 장점:
- 문서화 개선: 명시적 타입은 코드를 자체 문서화시켜.
- 더 나은 자동완성: 코드 에디터가 자동완성 향상에 타입 정보를 활용할 수 있어.
- 디버깅 도움: 정적 타입 검사는 프로그램 실행 전에 잠재적 오류를 찾아낼 수 있어.
타입 작업 도구
Python은 선언된 변수 타입에 반응하지 않아. 대신 Python에는 mypy라는 도구가 있어. 타입 명시를 사용한 코드에서 오류를 잡아내는 데 도움을 주는 인기 있는 정적 타입 분석 도구야.
GO TO FULL VERSION