我有以下字典,其中包含一系列函数及其键,如下图所示:
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 ...
如果有人能帮助我,我会非常感激。 谢谢!
答案 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)}