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

推荐使用
————————————————
版权声明:本文为CSDN博主「sysu_lluozh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lluozh2015/article/details/102748752

上一篇:uni-app 小程序数据列表进行分页


下一篇:c#直接调用DLL里面的函数,以UF_MODL_ask_face_parm为例