파이썬 모듈에서 모든 함수를 나열하는 방법?
내 시스템에 파이썬 모듈이 설치되어 있으며 사용할 수있는 기능 / 클래스 / 방법을보고 싶습니다.
각각에 doc 함수를 호출하고 싶습니다. 루비에서는 ClassName.methods와 같은 방법으로 해당 클래스에서 사용할 수있는 모든 메소드 목록을 얻을 수 있습니다. 파이썬에 비슷한 것이 있습니까?
예. 같은 :
from somemodule import foo
print foo.methods # or whatever is the correct method to call
inspect
모듈. 또한 pydoc
모듈, help()
대화식 인터프리터 의 기능 및 pydoc
이후의 문서를 생성하는 명령 행 도구를 참조하십시오. 당신은 그들에게 당신이보고 싶은 수업을 줄 수 있습니다. 예를 들어 HTML 출력을 생성하여 디스크에 쓸 수도 있습니다.
사용 dir(module)
가능한 모든 방법 / 속성을 볼 수 있습니다 . PyDocs도 확인하십시오.
import
모듈을 편집 한 후에 는 다음을 수행 할 수 있습니다.
help(modulename)
... 한 번에 모든 기능에 대한 문서를 대화식으로 가져옵니다. 또는 다음을 사용할 수 있습니다.
dir(modulename)
... 모듈에 정의 된 모든 함수와 변수의 이름을 간단히 나열합니다.
inspect 예제 :
from inspect import getmembers, isfunction
from my_project import my_module
functions_list = [o for o in getmembers(my_module) if isfunction(o[1])]
getmembers는 (object_name, object_type) 튜플 목록을 리턴합니다.
inspect 모듈에서 isfunction을 다른 isXXX 기능으로 바꿀 수 있습니다.
import types
import yourmodule
print([getattr(yourmodule, a) for a in dir(yourmodule)
if isinstance(getattr(yourmodule, a), types.FunctionType)])
완벽을 기하기 위해 때로는 코드를 가져 오는 대신 구문 분석 할 수 있음을 지적하고 싶습니다 . 는 최상위 식 import
을 실행 하므로 문제가 될 수 있습니다.
예를 들어, zipapp 로 만든 패키지에 대한 진입 점 기능을 사용자가 선택할 수 있습니다. 타락 코드를 사용 import
하고 inspect
위험을 감수하면 충돌이 발생하고 도움말 메시지가 인쇄되며 GUI 대화 상자가 나타납니다.
대신 ast 모듈을 사용하여 모든 최상위 기능을 나열합니다.
import ast
import sys
def top_level_functions(body):
return (f for f in body if isinstance(f, ast.FunctionDef))
def parse_ast(filename):
with open(filename, "rt") as file:
return ast.parse(file.read(), filename=filename)
if __name__ == "__main__":
for filename in sys.argv[1:]:
print(filename)
tree = parse_ast(filename)
for func in top_level_functions(tree.body):
print(" %s" % func.name)
이 코드 list.py
를 입력하고 입력으로 사용하면 다음과 같은 결과를 얻습니다.
$ python list.py list.py
list.py
top_level_functions
parse_ast
물론 AST 탐색은 까다로울 수 있습니다. AST는 수준이 낮기 때문에 Python과 같은 비교적 간단한 언어의 경우에도 마찬가지입니다. 그러나 간단하고 명확한 유스 케이스가 있으면 실행 가능하고 안전합니다.
그러나 단점은와 같이 런타임에 생성되는 함수를 감지 할 수 없다는 것 foo = lambda x,y: x*y
입니다.
이것은 트릭을 할 것입니다 :
dir(module)
그러나 반환 된 목록을 읽는 것이 성가신 경우 다음 루프를 사용하여 한 줄에 하나의 이름을 얻으십시오.
for i in dir(module): print i
구문 분석하지 않으려는 코드의 경우 위의 @csl의 AST 기반 접근 방식을 권장합니다.
다른 모든 경우에는 inspect 모듈이 정확합니다.
import inspect
import <module_to_inspect> as module
functions = inspect.getmembers(module, inspect.isfunction)
이것은 형식의 2- 튜플 목록을 제공합니다 [(<name:str>, <value:function>), ...]
.
위의 간단한 답변은 다양한 답변과 의견에 암시되어 있지만 명시 적으로 언급되지 않았습니다.
dir(module)
대부분의 답변에서 언급했듯이 스크립트 또는 표준 인터프리터를 사용할 때의 표준 방법입니다.
그러나 IPython 과 같은 대화식 파이썬 쉘 에서는 탭 완성을 사용하여 모듈에 정의 된 모든 객체의 개요를 얻을 수 있습니다. 이것은 스크립트를 사용 print
하고 모듈에 정의 된 내용을 보는 것 보다 훨씬 편리 합니다.
module.<tab>
모듈에 정의 된 모든 객체 (함수, 클래스 등)가 표시됩니다.module.ClassX.<tab>
클래스의 메소드와 속성을 보여줄 것입니다module.function_xy?
또는module.ClassX.method_xy?
해당 함수 / 메소드의 docstring을 보여줍니다module.function_x??
또는module.SomeClass.method_xy??
함수 / 메소드의 소스 코드를 보여줍니다.
전역 함수의 dir()
경우 (대부분의 답변에서 언급했듯이) 사용할 명령이지만 공용 함수와 비공개 함수를 모두 나열합니다.
예를 들면 다음과 같습니다.
>>> import re
>>> dir(re)
다음과 같은 함수 / 클래스를 반환합니다.
'__all__', '_MAXCACHE', '_alphanum_bytes', '_alphanum_str', '_pattern_type', '_pickle', '_subx'
그 중 일부는 일반적으로 일반 프로그램 사용에 대한 의미 (그러나 모듈 자체에 의해, 같은 DunderAliases의 경우를 제외되지 않습니다 __doc__
, __file__
요법). 이러한 이유로 공개 목록과 함께 나열하는 것은 유용하지 않을 수 있습니다 (Python은을 사용할 때 무엇을 얻을 수 있는지 알고 있습니다 from module import *
).
__all__
이 문제를 해결하는 데 사용될 수 있으면 모듈의 모든 공용 함수 및 클래스 목록 ( 밑줄로 시작 하지 않는 - _
)을 반환합니다 . 누군가 파이썬에서 __all__을 설명 할 수 있습니까?를 참조하십시오 . 의 사용을 위해 __all__
.
예를 들면 다음과 같습니다.
>>> import re
>>> re.__all__
['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']
>>>
밑줄이있는 모든 함수와 클래스는 제거되었으며 public으로 정의되어 따라서를 통해 사용할 수있는 것만 남습니다 import *
.
__all__
항상 정의 되는 것은 아닙니다. 포함되어 AttributeError
있지 않으면가 발생합니다.
이 경우는 ast 모듈의 경우입니다.
>>> import ast
>>> ast.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'ast' has no attribute '__all__'
>>>
가져 오기 오류없이 해당 Python 파일을 가져올 수 없으면 이러한 답변 중 어느 것도 작동하지 않습니다. 이것은 많은 의존성이있는 큰 코드베이스에서 온 파일을 검사 할 때 나에게 해당됩니다. 다음은 파일을 텍스트로 처리하고 "def"로 시작하는 모든 메소드 이름을 검색하여 해당 행 번호를 인쇄합니다.
import re
pattern = re.compile("def (.*)\(")
for i, line in enumerate(open('Example.py')):
for match in re.finditer(pattern, line):
print '%s: %s' % (i+1, match.groups()[0])
이전 답변에서 언급 한 dir (module) 또는 help (module)을 제외하고 다음을 시도해 볼 수도 있습니다.
-ipython 열기-module_name
가져 오기-module_name
유형, tab 키를 누릅니다. 파이썬 모듈의 모든 기능을 나열하는 작은 창이 열립니다.
매우 깔끔해 보입니다.
다음은 hashlib 모듈의 모든 기능을 나열하는 스 니펫입니다.
(C:\Program Files\Anaconda2) C:\Users\lenovo>ipython
Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import hashlib
In [2]: hashlib.
hashlib.algorithms hashlib.new hashlib.sha256
hashlib.algorithms_available hashlib.pbkdf2_hmac hashlib.sha384
hashlib.algorithms_guaranteed hashlib.sha1 hashlib.sha512
hashlib.md5 hashlib.sha224
다음 방법을 사용하여 쉘에서 모듈의 모든 기능을 나열 할 수 있습니다.
import module
module.*?
이것은 your_module에 정의 된 모든 기능을 목록에 추가합니다.
result=[]
for i in dir(unit8_conversion_methods):
if type(getattr(your_module, i)).__name__ == "function":
result.append(getattr(your_module, i))
참고 URL : https://stackoverflow.com/questions/139180/how-to-list-all-functions-in-a-python-module
'Programming' 카테고리의 다른 글
EditText의 첫 글자 대문자 (0) | 2020.02.27 |
---|---|
핍의 캐시를 제거 하시겠습니까? (0) | 2020.02.27 |
보이는 DOM에 요소가 있는지 확인하는 방법? (0) | 2020.02.27 |
PowerShell에서 문자열이 null인지 또는 비어 있는지 어떻게 확인할 수 있습니까? (0) | 2020.02.27 |
iOS 및 WatchKit에서 이미지 tintColor를 변경하는 방법 (0) | 2020.02.27 |