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