복붙노트

[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. ==============================

    1.이런 일을하는 가장 깨끗한 방법은 inspect 모듈을 사용하는 것입니다. 여기에는 두 번째 인수로 술어를 사용하는 getmembers 함수가 있습니다. 술어로 isfunction을 사용할 수 있습니다.

    이런 일을하는 가장 깨끗한 방법은 inspect 모듈을 사용하는 것입니다. 여기에는 두 번째 인수로 술어를 사용하는 getmembers 함수가 있습니다. 술어로 isfunction을 사용할 수 있습니다.

     import inspect
    
     all_functions = inspect.getmembers(module, inspect.isfunction)
    

    이제 all_functions는 첫 번째 요소가 함수의 이름이고 두 번째 요소가 함수 자체 인 튜플 목록입니다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.야생 수입의 경우

    야생 수입의 경우

    from foo import * 
    print dir()
    

    매개 변수없이 dir ()을 사용하여 현재 모듈의 네임 스페이스에있는 객체를 표시 할 수 있습니다. 이것은 아마도 foo의 내용 이상을 포함 할 것입니다.

    절대 import가 필요한 경우 (이 과정에서 선호해야 함) 모듈을 dir ()에 전달할 수 있습니다.

    import foo
    print dir(foo)
    

    또한 dir의 문서를 확인하십시오. 함수를 원했기 때문에 inspect.isfunction을 사용하는 것이 좋습니다. 디버깅 용이 아닌 목록을 사용하지 않기를 바랍니다.

  6. ==============================

    6.현재 모듈의 기능을 나열하려는 경우 (즉, 가져온 모듈이 아닌 경우) 다음과 같이 할 수 있습니다.

    현재 모듈의 기능을 나열하려는 경우 (즉, 가져온 모듈이 아닌 경우) 다음과 같이 할 수 있습니다.

    import sys
    def func1(): pass
    def func2(): pass
    
    if __name__ == '__main__':
        print dir(sys.modules[__name__])
    
  7. from https://stackoverflow.com/questions/4040620/is-it-possible-to-list-all-functions-in-a-module by cc-by-sa and MIT license