有时候需要根据不同的情况调用不同的方法实现功能逻辑,有什么优雅的方式可以实现么?
首先有一个最原始的 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')
推荐使用