我知道eval()是不好的做法;我的代码是否有另一种选择,包括在一个文件夹中的所有文件中获取所有函数的__doc__ ?



我正在做一个项目,涉及导入目录作为模块(它有一个__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.pyorange.py的文件,每个文件都有几个功能,只是打印"hello"并有一个由他们的名字组成的文档字符串。我知道使用列表理解可以更有效地执行main.py;但是我现在只是随便玩玩,测试一下。

我不希望使用eval(),所以如果你知道另一种方法来完成它,我将非常感激。

谢谢

你的变量应该可以在globals()中访问,所以你可以直接

for name, object in vars(globals()[file]).items():

相关内容

  • 没有找到相关文章

最新更新