>source

다음과 같이 라이브러리 모듈 a.py를 작성한다고 가정 해 보겠습니다.

def call_func(f):
    """ invoke func by its func str """
    return eval(f)()

사용자 정의 기능은 b.py 모듈에 있습니다.

from a import call_func  
def b():
    return "b"
call_func("b")

모듈 a에서 함수 b가 노출되지 않기 때문에 오류가 발생합니다. 함수 b는 사용자 공간에 있으므로 라이브러리 a의 관점에서 사용자 정의 함수 b는 알 수 없습니다.

a.py에서 등록 기능을 사용하는 것이 가능할 수도 있지만 어떻게하는지 모르겠습니다. 아니면 다른 방법이 있습니까?

감사!

  • 답변 # 1

    사용하지 마십시오 eval 원래이제까지.

    함수 사전을 사용하여 다음과 결합 할 수 있습니다. globals() (또는 더 좋을 수도 있지만 명시적인 함수 사전이 있습니다. {"b": b} ) :

    def call_func(funcs, f):
        return funcs[f]()
    def b():
        print("b was called")
    call_func(globals(), "b")
    
    
    

  • 답변 # 2

    함수 자체를 전달하십시오.

    a.py

    def call_func(f):
        return f()
    
    

    b.py

    from a import call_func  
    def b():
        return "b"
    call_func(b)
    
    

관련 자료

  • 이전 datetime - 2 행 날짜 및 시간이있는 SQLite 마지막 24 시간 쿼리
  • 다음 memory - 씨 - memset 호출 후 이상한 sysmalloc 어설 션 오류