如下:有 fun_a(),fun_b(),fun_c()...fun_z() 26个函数,函数名称的后缀根据26个字母所得。能否写一个函数,输入参数为1个字符,'a' or 'b' or 'c'...or 'z' 根据输入参数调用对应的函数,如输入参数为'a' 则调用fun_a()
2 回答
狐的传说
TA贡献1804条经验 获得超3个赞
使用字典,比如下面这样:
12345678910111213 | def funcA(): pass def funcB(): pass def func_None(): print "cannot find func" func_dict = { "a" : funcA, "b" : funcB} def func(x): return func_dict.get(x, func_None)() |
在有switch的语言中,一般都是使用switch来根据入参进行判断。但是python中没有switch,因为根本不需要!!使用字典代替switch,性能更高,而且这种方法的表述能力更强一点。
另外func_dict.get(x, func_None)()中方法是从字典中取出值对应的函数对象,然后后面加上()是执行该对象的__call__方法。因为python中函数就是实现了__call__方法的对象。所以可以这么使用。
守着星空守着你
TA贡献1799条经验 获得超8个赞
12345678910111213 | def fun_a(): print 'a' def fun_b(): print 'b' def fun_z(): print 'z' def test_function(input_key): function_map = { 'a' :fun_a, 'b' :fun_b, 'z' :fun_z, } return function_map[input_key]() |
代码测试:
>>> test_function('a')
a
>>> test_function('b')
b
>>> test_function('z')
z
>>>
或者:
12 | def test_function(input_key): eval ( "fun_%s()" % input_key) |
添加回答
举报
0/150
提交
取消