Python 함수의 인수 개수 확인하기
다음과 같은 스크립트 qux.py가 있다고 가정해 보겠습니다.
#qux.py
def aMethod1(arg1, arg2):
pass
def aMethod2(arg1, arg2, arg3, arg4, arg5):
pass만약 이 스크립트의 내용에 직접 접근할 수 없는 상황이라면, inspect 모듈을 활용하여 주어진 함수의 인수 개수를 손쉽게 확인할 수 있습니다.
inspect 모듈로 매개변수 목록 가져오기
파이썬 함수 내부의 매개변수 이름 목록을 얻으려면 먼저 inspect 모듈을 임포트하고, 분석 대상인 qux.py 스크립트도 함께 임포트합니다.
inspect.getargspec(foo)를 호출하면 함수 foo()의 모든 인수 정보를 담은 객체를 반환받습니다. 이 객체의 첫 번째 요소는 일반(위치) 인수들의 이름 목록입니다. 따라서 x = inspect.getargspec(foo)라고 했을 때, 인수의 총 개수는 len(x[0])으로 구할 수 있습니다.
#fubar.py import qux import inspect x = inspect.getargspec(qux.aMethod1) y = inspect.getargspec(qux.aMethod2) print(len(x[0])) # 2 출력 print(len(y[0])) # 5 출력
터미널에서 이 스크립트를 실행하면,
$ python fubar.py
다음과 같은 결과를 얻습니다.
2 5
참고: 최신 파이썬에서는 getfullargspec 또는 signature 사용 권장
inspect.getargspec()은 파이썬 3에서 오랫동안 지원 중단(deprecated) 상태였으며, 파이썬 3.11부터는 완전히 제거되었습니다. 최신 버전의 파이썬을 사용하고 있다면 inspect.getfullargspec() 또는 inspect.signature()를 사용하는 것이 좋습니다.
#fubar.py (권장 방식) import qux import inspect sig = inspect.signature(qux.aMethod2) print(len(sig.parameters)) # 5 출력
inspect.signature()는 키워드 전용 인수, 기본값, 타입 힌트 등 더 풍부한 정보를 제공하므로, 새 프로젝트에서는 이 방식을 사용하는 것을 추천합니다.