首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python解析从另一个文件到控制台菜单中带有参数的所有函数

Python解析从另一个文件到控制台菜单中带有参数的所有函数
EN

Stack Overflow用户
提问于 2018-06-07 18:14:56
回答 1查看 42关注 0票数 0

我正在尝试创建一个控制台菜单,供用户在USB上进行验证。我有一个包含所有验证功能的verification.py,我试图调用console_menu.py。目前,每当console_menu.py中有一个新函数时,我都会手动将这些函数写入verification.py

verification.py:

代码语言:javascript
复制
def verify_mountpoint(mountpoint):
    ....
    ....

return True

def verify_filesystem(mountpoint):
    ....
    ....

return True   

def verify_size(mountpoint, usb_name):
    ....
    ....

return Size  

console_menu.py:

代码语言:javascript
复制
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中手动输入每个函数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 18:55:53

自动从模块中获取所有的函数通常不是一个好主意。

这很危险,因为模块通常具有从其他模块导入的受保护的函数和函数。

但是,如果您有某种方法只从模块中选择所需的函数,那么您可以做您想做的事情,或者使用一些关于它们名称的规则或者检查它们的属性。

下面是一个示例,它使用函数的名称作为筛选它们的方法。

代码语言:javascript
复制
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函数的参数名称列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50747704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档