为了账号安全,请及时绑定邮箱和手机立即绑定

注:请不要使用条件分支的方式

注:请不要使用条件分支的方式

阿波罗的战车 2022-08-11 11:07:21
如下:有 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个赞

使用字典,比如下面这样:

12345678910111213def 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__方法的对象。所以可以这么使用。


查看完整回答
反对 回复 2022-08-15
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

12345678910111213def 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

>>> 

或者:

12def test_function(input_key):    eval("fun_%s()"%input_key)




查看完整回答
反对 回复 2022-08-15
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信