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

问题描述

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
            }
        ]

在上面的最小代码示例中,我在一个列表中有几个元素,每个元素实际上代表一个元素(我用 pygame 制作的游戏菜单)。这些元素中的每一个都是一个字典,有几个键:值对,其中一个是“函数”。然后该函数被有选择地调用获取所选元素。但是,有时需要使用参数调用存储在此键值对中的函数,此时我无法弄清楚该怎么做。

我设法用条件语句做到了这一点,但这需要单独检查每个函数,这绕过了使用此字典列表作为具有多个(菜单)元素的灵活和通用方式的全部目的,每个元素都有其属性和相关的功能组织得井井有条。

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

解决方法

在阅读了许多建设性的评论和一些修补后,我找到了我真正需要的东西。

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

对于这样结构的字典:

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

我们可以这样做,这对于每个“函数”是否有任何关联的“args”或“kwargs”都需要灵活处理:

dictionary[element]["function"](
    *dictionary[element].get("args",[]),**dictionary[element].get("kwargs",{}),)