python - Python从文件夹中导入所有函数
问题描述
我有一个包含各种 Python 文件的文件夹,每个文件都包含一些称为任务的函数。我想做两件事:
而不是写
from module.file1 import function1, function2
from module.file2 import function3
我更愿意这样做:
from module import function1, function2, function3
除此之外,我需要str
此目录中可用的所有函数名称(as)的列表(不包括内置函数)。
到目前为止,我尝试__init__.py
使用以下内容编写一个:
from os.path import dirname, basename, isfile, join
import glob
modules = glob.glob(join(dirname(__file__), "*.py"))
functions = []
for m in modules:
if isfile(m) and not m.endswith('__init__.py'):
functions = [getattr(m, f) for f in dir(m) if callable(getattr(m, f))]
print(functions)
但是,functions
现在包含所有内置功能,但不是正在寻找的功能。此外,如何“返回”要导入的函数以及如何获取函数名称列表(仅限字符串)以供进一步使用?
解决方案
我找到了解决方法。
__init__.py
看起来如下
__all__ = []
import pkgutil
import inspect
for loader, name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(name).load_module(name)
for fname, value in inspect.getmembers(module, inspect.isfunction):
if fname.startswith('__'):
continue
if value.__module__ != module.__name__:
continue
globals()[fname] = value
__all__.append(fname)
它对模块名称进行额外检查,以确保我不列出导入的函数,而只列出模块中定义的函数。然后在另一个文件中包含它:
from tasks import __all__ as function_names
import tasks
functions = [getattr(tasks, f) for f in function_names]
推荐阅读
- java - FileReader 不会读取列表中的第二个文件
- node.js - 我想使用jade/pug将对象数组中的每个元素可视化到一个表中
- powershell - 如何更改 powershell 调试器行颜色以使其可读
- php - 使用具有 diffForHumans 重复天数的 Localized Carbon
- database - 存储未选中的复选框数据
- abap - 如何在 SAP 中根据 T-Code 或程序名称查找功能组名称和屏幕编号?
- python - Python 抽象基类
- mobile - 在移动浏览器中滑动表格
- ios - Swift UIPageControl 以编程方式不再出现点
- firebase - 如何从颤动的数据快照中获取特定值?