【python】根据不同参数调用不同的函数

有时候需要根据不同的情况调用不同的方法实现功能逻辑,有什么优雅的方式可以实现么?
首先有一个最原始的 if ... else 方式

parm = 'A'
def A():
    print("A")

def B():
    print("B")
    
if parm == 'A':
    A()
elif parm == 'B':
    B()

这样的方式可以实现功能逻辑,但是略显low,而且后续的扩展不大好

那是否有更好的方式呢?

func_dict

func_dict.get(x, func_None)()中方法是从字典中取出值对应的函数对象,然后后面加上()是执行该对象的__call__方法。因为python中函数就是实现了__call__方法的对象

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)()

exec

exec内置函数是继eval之后的一个很有用的函数,可以执行python的代码,传入python的代码字符串就行

parm = 'A'

def A(m):
    print("A+", m)

def B(m):
    print("B+", m)
   
eval("{0}".format('A'))('xx')

getattr()

用于返回一个对象属性值
语法:
getattr(object, name[, default])
参数:
object – 对象。
name – 字符串,对象属性。
default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError
返回值:
返回对象属性值

parm = 'A'
class C(object):
    def A(self,m):
        print("A+",m)

    def B(self,m):
        print("B+",m)

getattr(C(), parm)('p')

推荐使用

原文地址:https://www.cnblogs.com/guanhuohuo/p/12533578.html