Python:如何创建包含某些函数的字典,而不是在赋值时运行它们?

时间:2014-10-05 16:40:45

标签: python function dictionary

我有以下字典,其中包含一系列函数及其键,如下图所示:

function_list = {0:power_off(), 1:image_capture(100,1000,100,100), 2:video_record(100,100), 3:image_settings(), 4:video_settings(), 5:device_settings()}

实际上大约有5倍,但我为这篇文章简化了...... 我的问题是,我该如何处理,以便在我定义 function_list 字典时,它不会从它的内容中运行所有函数,而只是在我以下面的方式调用它们时: function_list [current_selection] ,基于 current_selection 参数的值。

我这样做,所以我不需要像if ...... elif这样长而复杂的陈述:

if current_selection == 0:
    power_off()
elif current_selection == 1:
    image_capture(100,1000,100,100)
elif current_selection ==2:
    video_record(100,100)
... and so on ...

如果有人能帮助我,我会非常感激。 谢谢!

2 个答案:

答案 0 :(得分:4)

试试这个:

function_list = {0:{"func":power_off},
                 1:{"func":image_capture, "args":(100,1000,100,100)},
                 2:{"func":video_record, "args":(100,100)},
                 3:{"func":image_settings},
                 4:{"func":video_settings},
                 5:{"func":device_settings} }

f = function_list[current_selection]
if "args" in f:
    f["func"](*f["args"])
else:
    f["func"]()

答案 1 :(得分:0)

问题是你正在进行函数调用。字典中的值应该是函数引用。

function_list = {0:power_off} 然后打电话, function_list[0]()

如果必须传递参数,则可以用lambda表达式替换函数引用。

function_list = {1: lambda arg1, arg2: image_capture(arg1, arg2)}