在一个文件夹中,有很多个 Python
文件,每个文件都有若干重名函数,需要一一导入。这个时候,可以用 Python
的自动导入包来实现。
需求描述
假设有一个文件夹
1 2 3 4 5
| func/ ├── __init__.py ├── func1.py ├── func2.py ├── func3.py
|
每个文件都有一个重名函数,比如
1 2 3
| def foo(): print("foo")
|
这不仅导致 import
代码不够简洁,且在新增文件时,还得在
__init__.py
中添加 import
语句。甚至在调用处也得增加代码来处理。
解决方案
Python 的自动导入包可以解决这个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import os import glob import importlib
files = glob.glob(os.path.join(os.path.dirname(__file__), "*.py")) func_dict = {} for file_ in files: func_name = os.path.basename(file_)[:-3] load_module = importlib.import_module(f"func.{func_name}") globals()[load_module.__name__] = getattr(load_module, "foo")
func_dict[func_name] = globals()[load_module.__name__]
|
这样,不仅不需要在 func/__init__.py
中添加
import
语句,也不需要在调用处添加额外的代码。甚至,还要根据需求,从字典中调用对应函数。当然,这需要提前进行约定,比如全部放到func
文件夹下,且都用foo
这个名字作为函数名。