如何使用参数调用存储为变量的函数-Python 3

如何使用参数调用存储为变量的函数-Python 3,python,first-class-functions,Python,First Class Functions,在上面的最小代码示例中,我在一个列表中有几个元素,每个元素实际上代表一个元素(我用pygame制作的游戏菜单)。这些元素中的每一个都是一个字典,有几个键:值对,其中一个是“函数”。然后,对所选元素有选择地调用该函数。然而,有时,存储在这个key:value对中的函数需要用参数调用,在这一点上我不知道该怎么做 我设法用条件语句实现了这一点,但这需要分别检查每个函数,这就绕过了将此DICT列表作为一种灵活和通用的方式来使用多个(菜单)元素的整个目的,每个元素都有其属性和关联的函数,并且组织得井井有条

在上面的最小代码示例中,我在一个列表中有几个元素,每个元素实际上代表一个元素(我用pygame制作的游戏菜单)。这些元素中的每一个都是一个字典,有几个键:值对,其中一个是“函数”。然后,对所选元素有选择地调用该函数。然而,有时,存储在这个key:value对中的函数需要用参数调用,在这一点上我不知道该怎么做

我设法用条件语句实现了这一点,但这需要分别检查每个函数,这就绕过了将此DICT列表作为一种灵活和通用的方式来使用多个(菜单)元素的整个目的,每个元素都有其属性和关联的函数,并且组织得井井有条


有没有一种优雅的方法可以做到这一点,如果没有的话,你个人的方法是什么?

在阅读了许多建设性的评论和一些修补之后,我找到了我所需要的

此解决方案主要基于的注释,并进行了一些修改,以考虑丢失“args”和“kwargs”的可能性,具体取决于调用的特定函数。这是通过向“get”方法提供适当的默认值来处理的,“args”为空列表,“kwargs”为空字典

对于这样结构的词典:

def some_function():
    print("This will always be the same")


def some_other_function(text):
    print(text)


some_variable = "hello"

list_of_elements = [

    "element_one": {
        "name": "static_print",
        "function": some_function
            },

    "element_two": {
        "name": "flexible_print",
        "function": some_other_function
            }
        ]
我们可以这样做,这应该是灵活的,以确定每个“函数”是否有任何需要调用的关联“args”或“kwargs”:

dictionary = {
    {
        "function": some_function,
        "args": [1, 4],
    },

    {
        "function": some_other_function,
    },
}

这些论据从何而来,在什么时候?您可以使用吗?也许您可以始终使用
*args
**kwargs
调用函数?类似于
element[“function”](*args,**kwargs)
@jornsharpe参数通常来自构建菜单的函数的本地名称空间,这也是声明元素列表的地方。def run_func(f,a):返回f(a),然后可以在运行时运行函数(,)。您还可以使用map()(),您可能会在每个字典中添加一个键:值对,其中的变量列表包含函数所需的值。当您必须调用函数时,您可以从
locals()
获取参数值,构建
*args
序列(或
**kwargs
映射),并按照@Matteo Zanoni的建议将其传递给函数
dictionary[element]["function"](
    *dictionary[element].get("args", []), 
    **dictionary[element].get("kwargs", {}),
)