Python 자작 모듈의 함수를 동적으로 호출

4970 단어 Python

개시하다


클론 프로그램을 개발할 때 URL을 통해 함수를 동적으로 호출할 수 있습니다.그러나 URLhttps://test.com/ほげ처럼 2바이트 문자가 포함된 경우 def ほげ():class ほげ(object):처럼 코드에 2바이트 문자를 써야 한다.아무래도 좀 못생긴 것 같아서 이 기사에 이 문제를 해결할 방법을 쓰겠습니다.

해결책


파이톤은 디렉터리를 모듈로 처리할 수 있기 때문에 사용했습니다.(코드에 잠시 없어서...)

디렉토리 구조

main.py에서 모듈을 사용한다고 가정하면 다음 모듈parser_module을 동적으로 호출합니다.

모듈 코드


parse_moduleinit__.py
from .parser import *
parse_module.py
def parse():
    print('hoge')
parse_module/ふが/init__.py
from .parser import *
parse_module/ふ/parser.py
def parse():
    print('fuga')

parser_모듈 코드

parser_module/__init__.py에서 키를 모듈 이름으로 정의하고value를 모듈로 사전을 되돌려주는 함수로 한다.
parse_module/__init__.py
import importlib
import os
import sys

def modules():
    path = os.path.dirname(__file__)
    sys.path.append(path)
    module_name = [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
    return {module.__name__: module for module in map(importlib.import_module, module_name)}

main.py로 해봐.

parser_module/__init__.py에 정의된 모듈 함수를 가져옵니다.modules 함수 반환 사전은 다음과 같이 사용할 수 있습니다.
main.py
from parser_module import modules


urls = [
    'https://test.com/ほげ',
    'https://test.com/ふが'
]

for path in map(lambda x: x.split('/')[-1], urls):
    modules()[path].parse()
실행 결과
$ python main.py
hoge
fuga
순조롭게 불러냈다.

좋은 웹페이지 즐겨찾기