Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 모듈의 모든 함수와 기능을 나열하는 방법

dir() 함수로 모듈의 모든 속성 확인하기

파이썬에서 모듈이 제공하는 모든 속성과 메서드를 한눈에 확인하려면 내장 함수인 dir(module)을 사용하면 됩니다. 이 함수는 해당 모듈에 정의된 이름들을 리스트 형태로 반환합니다. 예를 들어 math 모듈의 구성 요소를 확인해 보겠습니다.

>>> import math
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

그런데 출력 결과를 잘 살펴보면 __name__, __doc__, __package__처럼 모듈 자체가 가진 특수 속성(던더 속성)까지 함께 포함되어 있는 것을 볼 수 있습니다. 순수하게 모듈이 제공하는 함수만 얻고 싶다면 추가적인 필터링이 필요합니다.

inspect 모듈로 함수만 깔끔하게 추출하기

모듈의 일반 함수만 정확히 골라내려면 표준 라이브러리의 inspect 모듈에 있는 getmembers() 함수와 isfunction 술어(predicate)를 조합하는 것이 가장 좋은 방법입니다. getmembers(module)는 모듈의 모든 멤버를 (이름, 값) 형태의 튜플 목록으로 반환하며, 여기에 isfunction으로 필터를 적용하면 실제 함수만 남게 됩니다.

>>> from inspect import getmembers, isfunction
>>> import helloworld
>>> print([o[0] for o in getmembers(helloworld) if isfunction(o[1])])
['hello_world']

위 코드에서 o[0]은 멤버의 이름을, o[1]은 실제 객체를 의미합니다. 만약 함수 객체 자체가 필요하다면 [o for o in getmembers(helloworld) if isfunction(o[1])]처럼 그대로 반환받으면 되며, 이 경우 각 항목은 (이름, 함수 객체) 튜플 형태로 제공됩니다.

내장 모듈에 적용할 때의 주의 사항

한 가지 유의할 점은 이 방법이 C로 작성된 내장(built-in) 모듈에는 그대로 적용되지 않는다는 것입니다. 내장 모듈의 함수들은 파이썬으로 정의된 일반 function 타입이 아니라 builtin_function_or_method 타입이기 때문에 isfunction으로는 걸러지지 않습니다. 이런 경우에는 대신 isbuiltin을 사용하면 됩니다.

>>> from inspect import getmembers, isbuiltin
>>> import math
>>> print([o[0] for o in getmembers(math) if isbuiltin(o[1])])
['acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

정리하자면, 모듈의 전체 구성 요소를 빠르게 훑어볼 때는 dir()을, 순수 파이썬 함수만 필요할 때는 getmembers() + isfunction을, 내장 모듈의 함수를 다룰 때는 isbuiltin을 활용하면 상황에 맞게 원하는 결과를 얻을 수 있습니다.