我知道 eval() 是不好的做法;我的代码是否有替代方案,涉及获取文件夹中所有文件中所有函数的 __doc__?
I know eval() is bad practice; is there an alternative for my code which involves getting the __doc__ of all funcs in all files in a folder?
我正在制作一个项目,该项目涉及将目录导入为模块(它有一个 __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():
我正在制作一个项目,该项目涉及将目录导入为模块(它有一个 __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():