[PYTHON] 모듈의 모든 기능을 나열 할 수 있습니까? [복제]
PYTHON모듈의 모든 기능을 나열 할 수 있습니까? [복제]
이 형식으로 .py 파일을 정의했습니다.
def foo1(): pass
def foo2(): pass
def foo3(): pass
다른 파일에서 가져옵니다.
from foo import *
# or
import foo
모든 함수 이름을 나열 할 수 있습니까? [ "foo1", "foo2", "foo3"]?
도와 줘서 고마워, 내가 원하는 것을 위해 수업을했고, 제안이 있으면 pls의 의견을 말해줘.
class GetFuncViaStr(object):
def __init__(self):
d = {}
import foo
for y in [getattr(foo, x) for x in dir(foo)]:
if callable(y):
d[y.__name__] = y
def __getattr__(self, val) :
if not val in self.d :
raise NotImplementedError
else:
return d[val]
해결법
-
==============================
1.이런 일을하는 가장 깨끗한 방법은 inspect 모듈을 사용하는 것입니다. 여기에는 두 번째 인수로 술어를 사용하는 getmembers 함수가 있습니다. 술어로 isfunction을 사용할 수 있습니다.
이런 일을하는 가장 깨끗한 방법은 inspect 모듈을 사용하는 것입니다. 여기에는 두 번째 인수로 술어를 사용하는 getmembers 함수가 있습니다. 술어로 isfunction을 사용할 수 있습니다.
import inspect all_functions = inspect.getmembers(module, inspect.isfunction)
이제 all_functions는 첫 번째 요소가 함수의 이름이고 두 번째 요소가 함수 자체 인 튜플 목록입니다.
-
==============================
2.dir을 사용하여 네임 스페이스를 탐색 할 수 있습니다.
dir을 사용하여 네임 스페이스를 탐색 할 수 있습니다.
import foo print dir(foo)
예 : 쉘에서 foo로드하기
>>> import foo >>> dir(foo) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'foo1', 'foo2', 'foo3'] >>> >>> getattr(foo, 'foo1') <function foo1 at 0x100430410> >>> k = getattr(foo, 'foo1') >>> k.__name__ 'foo1' >>> callable(k) True >>>
getattr을 사용하여 foo에서 연관된 속성을 가져 와서 호출 할 수 있는지 알아낼 수 있습니다.
설명서를 확인하십시오 : http://docs.python.org/tutorial/modules.html#the-dir-function
당신이 "from foo import *"를하면 이름은 이것을 호출하는 네임 스페이스에 포함됩니다.
>>> from foo import * >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'atexit', 'foo1', 'foo2', 'foo3'] >>>
파이썬의 인트로 스펙 션에 대한 다음과 같은 간단한 내용이 도움이 될 것입니다.
-
==============================
3.module -> temp.py 인 경우 아래의 expectle과 같은 inspect 모듈을 사용해보십시오.
module -> temp.py 인 경우 아래의 expectle과 같은 inspect 모듈을 사용해보십시오.
In [26]: import inspect In [27]: import temp In [28]: l1 = [x.__name__ for x in temp.__dict__.values() if inspect.isfunction(x)] In [29]: print l1 ['foo', 'coo']
-
==============================
4.처럼 aaronasterling은 inspect 모듈의 getmembers 함수를 사용하여이를 수행 할 수 있다고 말했다.
처럼 aaronasterling은 inspect 모듈의 getmembers 함수를 사용하여이를 수행 할 수 있다고 말했다.
import inspect name_func_tuples = inspect.getmembers(module, inspect.isfunction) functions = dict(name_func_tuples)
그러나 여기에는 다른 곳에서 정의되었지만 해당 모듈의 네임 스페이스로 가져온 함수가 포함됩니다.
해당 모듈에 정의 된 함수 만 가져 오려면이 스 니펫을 사용하십시오.
name_func_tuples = inspect.getmembers(module, inspect.isfunction) name_func_tuples = [t for t in name_func_tuples if inspect.getmodule(t[1]) == module] functions = dict(name_func_tuples)
-
==============================
5.야생 수입의 경우
야생 수입의 경우
from foo import * print dir()
매개 변수없이 dir ()을 사용하여 현재 모듈의 네임 스페이스에있는 객체를 표시 할 수 있습니다. 이것은 아마도 foo의 내용 이상을 포함 할 것입니다.
절대 import가 필요한 경우 (이 과정에서 선호해야 함) 모듈을 dir ()에 전달할 수 있습니다.
import foo print dir(foo)
또한 dir의 문서를 확인하십시오. 함수를 원했기 때문에 inspect.isfunction을 사용하는 것이 좋습니다. 디버깅 용이 아닌 목록을 사용하지 않기를 바랍니다.
-
==============================
6.현재 모듈의 기능을 나열하려는 경우 (즉, 가져온 모듈이 아닌 경우) 다음과 같이 할 수 있습니다.
현재 모듈의 기능을 나열하려는 경우 (즉, 가져온 모듈이 아닌 경우) 다음과 같이 할 수 있습니다.
import sys def func1(): pass def func2(): pass if __name__ == '__main__': print dir(sys.modules[__name__])
from https://stackoverflow.com/questions/4040620/is-it-possible-to-list-all-functions-in-a-module by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 배열 블록 내에서 값의 합을 계산하는 방법 (0) | 2018.10.22 |
---|---|
[PYTHON] 파이썬에서 개별 픽셀 값으로 이미지를 그리는 가장 빠른 방법은 무엇입니까? (0) | 2018.10.22 |
[PYTHON] keras가 gpu 버전의 tensorflow를 사용하고 있는지 어떻게 확인합니까? (0) | 2018.10.22 |
[PYTHON] matplotlib의 텍스트 주위 상자 (0) | 2018.10.22 |
[PYTHON] 클래스 '__new__ 메소드를 팩토리로 사용 : __init__이 두 번 호출 됨 (0) | 2018.10.22 |