我正在尝试创建一个控制台菜单,供用户在USB上进行验证。我有一个包含所有验证功能的verification.py,我试图调用console_menu.py。目前,每当console_menu.py中有一个新函数时,我都会手动将这些函数写入verification.py。
verification.py:
def verify_mountpoint(mountpoint):
....
....
return True
def verify_filesystem(mountpoint):
....
....
return True
def verify_size(mountpoint, usb_name):
....
....
return Size console_menu.py:
def verification_menu():
menu_options = { # is there a way to call ALL the functions in verification.py here?
"verify_mountpoint": (verify_mountpoint, ["mountpoint"]),
"verify_filesystem": (verify_filesystem, ["mountpoint"]),
"verify_size": (verify_size, ["mountpoint", "usb_name"])
}
...
...我的问题是,是否有一种方法可以自动获取verification.py中的所有函数,这样我就不必在console_menu.py中手动输入每个函数
发布于 2018-06-07 18:55:53
自动从模块中获取所有的函数通常不是一个好主意。
这很危险,因为模块通常具有从其他模块导入的受保护的函数和函数。
但是,如果您有某种方法只从模块中选择所需的函数,那么您可以做您想做的事情,或者使用一些关于它们名称的规则或者检查它们的属性。
下面是一个示例,它使用函数的名称作为筛选它们的方法。
import verification
from inspect import signature
# Obtain a list of all functions in `verify` which have `verify_` in their name
# `my_function` is a list of tuples (function_name, function)
my_functions = [(func_name, getattr(verification, func_name)) for func_name in dir(verification) if "verify_" in func_name]
menu_options = {func_name: (func, list(signature(func).parameters)) for func_name, func in my_functions}list(signature(func).parameters))获得func函数的参数名称列表。
https://stackoverflow.com/questions/50747704
复制相似问题