python 如何根据输入参数调用不同的函数

如下:有fun_a(),fun_b(),fun_c()...fun_z()26个函数,函数名称的后缀根据26个字母所得。能否写一个函数,输入参数为1个字符,'a'or'b... 如下:
有 fun_a(),fun_b(),fun_c()...fun_z() 26个函数,函数名称的后缀根据26个字母所得。能否写一个函数,输入参数为1个字符,'a' or 'b' or 'c'...or 'z' 根据输入参数调用对应的函数,如输入参数为'a' 则调用fun_a()
注:请不要使用条件分支的方式
展开
 我来答
chenchiheng123
推荐于2017-09-19 · TA获得超过396个赞
知道小有建树答主
回答量:131
采纳率:100%
帮助的人:145万
展开全部

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

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

百度网友5b9bd189c
推荐于2017-09-16 · TA获得超过4285个赞
知道大有可为答主
回答量:906
采纳率:100%
帮助的人:1420万
展开全部
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

>>> 


或者:

def test_function(input_key):
    eval("fun_%s()"%input_key)
追问
嗯,确实很棒!可是此时如果我输入的是e,就会出错,因为函数fun_e()并未定义,不知道有没有办法预先判断是否存在函数fun_e()    ???
追答

只是举例,所以只写了fun_a, fun_b, fun_z,实际使用的时候,要全部写出来的。

如果函数不提供出来的话,怎么在后面调用呢?


直接在执行的时候做一些异常处理,就可以让它不报错:


def test_function(input_key):
    try:
        eval("fun_%s()"%input_key)
    except NameError:
        print 'Error, function fun_%s is not defined'%input_key


代码测试:

>>> test_function('ab')

Error, function fun_ab is not defined

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刷新①丅5e6
2015-05-21 · TA获得超过4333个赞
知道大有可为答主
回答量:1499
采纳率:64%
帮助的人:599万
展开全部
#Python3.x
def func():
    c = input("Please Enter a Char:")
    while(True):
        if c == 'a':
            func_a()
            break;
        if c == 'b':
            func_b()
            break;

func()
追问
谢谢回答,但是我已经备注不希望使用条件分支的方式,因为如此太繁琐了。。。是否还有其他方式?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式