我有一个Python模块,其中有几个函数,它应该根据用户输入调用不同的函数。例如,在我的代码中,我有如下内容:
if val == "X":
return foo.X(self)
elif val == "Y":
return foo.Y(self)
elif val == "Z":
return foo.Z(self)
else:
sys.exit("ERROR: value %s DNE"%(val))
有没有一种方法可以直接根据输入调用foo
模块中的python函数,而不需要多个if
语句?
发布于 2019-06-03 00:26:26
您可以使用常用的Python方法来避免在其他语言中使用的switch
语句:字典。函数是对象,所以函数可以是字典中的值。
function_dict = {'X': foo.X, 'Y': foo:Y, 'Z': foo.Z}
return function_dict[val](self)
如果val
不是字典中的关键字之一,则会引发错误。如果您不想要那个特定的错误,有几种方法可以引发另一个错误或完全避免错误。例如,如果键不在字典中,则可以使用字典的get
方法来使用默认值。例如,如果希望为X, Y, Z
以外的任何键调用foo.other
方法,则可以使用
function_dict = {'X': foo.X, 'Y': foo:Y, 'Z': foo.Z}
return function_dict.get(val, other)(self)
您还可以在使用字典之前检查val
是否为键之一,如下所示
function_dict = {'X': foo.X, 'Y': foo:Y, 'Z': foo.Z}
if val not in function_dict:
sys.exit("ERROR: value %s DNE"%(val))
return function_dict[val](self)
https://stackoverflow.com/questions/56416675
复制相似问题