微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用参数调用存储为变量的函数 - 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",{}),)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。