在开发中经常会遇见不同的参数需要执行不同函数。
在可选项众多的情况下如果使用if/else逐个判断的话,会使代码极度丑陋,不够优雅。
func = request.GET.get('func') #获取前端传递的需要后端执行的参数名称
if func == "a":
a()
else if func == "b":
b()
else if func == "c":
c()
如同上文展示的一样,我们需要根据用户不同的选择来执行不同的函数,这样的代码虽然简单好用但是并不优雅。
为了优美的实现他,我们可以用一些python的内建函数。
内建函数指的是python自带的函数,不需要定义,不同的内建函数有不同的功能,可以直接使用。
接下来介绍一个python的内建函数来优雅的实现它。
getattr()
getattr(object ,name)
这个地方的坑有很多。
举个例子:
class test:
def te():
print (1);
def tes(num):
print(num);
这里如果我们想要动态调用的话
我们只需要:
s = "te"
func = getattr(test,s)
print(func)
即可,注:此时的 getattr(test,s)只是获取到了函数,他并没有执行。依此不论函数有没有参数值,这里的s只需要函数的名字即可(返回一个函数是python的特性,在此不过多解释)
可以通过print 查看一下
可以看到此时的func变量已经绑定成了test类中的te函数。
如果想要执行的话,我们可以
s = "te"
temp = getattr(test,s)
temp()
s = "tes"
temp = getattr(test,s)
temp(2)
此时的输出结果为:
可以看出temp成功转换成了test.te的函数并成功调用执行。
此时我们再回过来看最开始的一段代码就可以改写成
func = request.GET.get('func') #获取前端传递的需要后端执行的参数名称
func = getattr(test,a)()
7行代码一下子就浓缩成2行代码,而且以后如果有扩展的话,也不会影响这里的代码扩展性。可谓是十分优雅。
如果涉及多个类的话,也可以多传递几个参数来进行控制,实现多个类函数的执行。
注:该方法只使用类的成员函数,对于普通的静态函数并不适用。
如果使用有什么问题,欢迎留言交流~