根据参数选择执行的函数 - 函数名

5 投票
1 回答
2404 浏览
提问于 2025-04-18 03:06

我有几个不同的函数,但每个函数需要的参数数量和类型都不一样。我想根据函数的名字(以字符串形式)来执行其中的一个函数。为此,我尝试了以下代码:

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': func1(arg1),
        'func2': func2(arg1, arg3),
        'func3': func3(arg2),
    }[function_name]

但是它会执行所有的函数 :( 不管我传入的字符串 function_name 是什么。

你们知道为什么会这样吗?我该怎么才能实现我想要的效果呢?(我刚开始学Python)。非常感谢大家的帮助! :)

1 个回答

9

你需要把函数本身添加到字典里,而不是它们的结果

如果想支持可变参数,可以使用 lambda 表达式或者 functools.partial() 来包装你的函数:

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': lambda: func1(arg1),
        'func2': lambda: func2(arg1, arg3),
        'func3': lambda: func3(arg2),
    }[function_name]()

或者

from functools import partial

def execute_function(function_name, arg1, arg2, arg3):
    return {
        'func1': partial(func1, arg1),
        'func2': partial(func2, arg1, arg3),
        'func3': partial(func3, arg2),
    }[function_name]()

在这两种情况下,你需要在从字典中取出对象(partiallambda 函数)后再去调用它。

撰写回答