Python 자작 모듈의 함수를 동적으로 호출
4970 단어 Python
개시하다
클론 프로그램을 개발할 때 URL을 통해 함수를 동적으로 호출할 수 있습니다.그러나 URLhttps://test.com/ほげ
처럼 2바이트 문자가 포함된 경우 def ほげ():
와class ほげ(object):
처럼 코드에 2바이트 문자를 써야 한다.아무래도 좀 못생긴 것 같아서 이 기사에 이 문제를 해결할 방법을 쓰겠습니다.
해결책
파이톤은 디렉터리를 모듈로 처리할 수 있기 때문에 사용했습니다.(코드에 잠시 없어서...)
디렉토리 구조 main.py
에서 모듈을 사용한다고 가정하면 다음 모듈parser_module
을 동적으로 호출합니다.
모듈 코드
parse_moduleinit__.pyfrom .parser import *
parse_module.pydef parse():
print('hoge')
parse_module/ふが/init__.pyfrom .parser import *
parse_module/ふ/parser.pydef parse():
print('fuga')
parser_모듈 코드 parser_module/__init__.py
에서 키를 모듈 이름으로 정의하고value를 모듈로 사전을 되돌려주는 함수로 한다.
parse_module/__init__.pyimport 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.pyfrom 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
순조롭게 불러냈다.
Reference
이 문제에 관하여(Python 자작 모듈의 함수를 동적으로 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk001100/items/d14054af63dc0e513c29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
파이톤은 디렉터리를 모듈로 처리할 수 있기 때문에 사용했습니다.(코드에 잠시 없어서...)
디렉토리 구조 main.py
에서 모듈을 사용한다고 가정하면 다음 모듈parser_module
을 동적으로 호출합니다.
모듈 코드
parse_moduleinit__.pyfrom .parser import *
parse_module.pydef parse():
print('hoge')
parse_module/ふが/init__.pyfrom .parser import *
parse_module/ふ/parser.pydef parse():
print('fuga')
parser_모듈 코드 parser_module/__init__.py
에서 키를 모듈 이름으로 정의하고value를 모듈로 사전을 되돌려주는 함수로 한다.
parse_module/__init__.pyimport 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.pyfrom 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
순조롭게 불러냈다.
Reference
이 문제에 관하여(Python 자작 모듈의 함수를 동적으로 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk001100/items/d14054af63dc0e513c29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
parse_moduleinit__.py
from .parser import *
parse_module.pydef parse():
print('hoge')
parse_module/ふが/init__.pyfrom .parser import *
parse_module/ふ/parser.pydef parse():
print('fuga')
parser_모듈 코드 parser_module/__init__.py
에서 키를 모듈 이름으로 정의하고value를 모듈로 사전을 되돌려주는 함수로 한다.
parse_module/__init__.pyimport 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.pyfrom 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
순조롭게 불러냈다.
Reference
이 문제에 관하여(Python 자작 모듈의 함수를 동적으로 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk001100/items/d14054af63dc0e513c29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)}
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
순조롭게 불러냈다.
Reference
이 문제에 관하여(Python 자작 모듈의 함수를 동적으로 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ksk001100/items/d14054af63dc0e513c29텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)