我正在做一个项目,涉及导入目录作为模块(它有一个__init__.py
),然后遍历该目录中的所有文件,并打印每个文件中所有函数的文档字符串。
这是我的main.py
代码,其中我必须使用eval()将文件名从字符串转换为实际的文件对象。
import fruits
from fruits import *
docs = []
for file in fruits.__all__:
tmp = []
for name, object in vars(eval(file)).items():
if callable(object):
tmp.append(object.__doc__)
docs.append(tmp)
这是我的__init__.py
:
from os.path import dirname, basename, isfile, join
import glob
fruits = glob.glob(join(dirname(__file__), "*.py"))
__all__ = [basename(f)[:-3] for f in fruits if isfile(f) and not f.endswith("__init__.py")]
fruits/
的内容是几个名为apple.py
和orange.py
的文件,每个文件都有几个功能,只是打印"hello"并有一个由他们的名字组成的文档字符串。我知道使用列表理解可以更有效地执行main.py;但是我现在只是随便玩玩,测试一下。
我不希望使用eval(),所以如果你知道另一种方法来完成它,我将非常感激。
谢谢
你的变量应该可以在globals()
中访问,所以你可以直接
for name, object in vars(globals()[file]).items():