专业编程基础技术教程

网站首页 > 基础教程 正文

python如何优雅的根据字符串决定函数执行

ccvgpt 2024-08-05 12:13:33 基础教程 11 ℃

在开发中经常会遇见不同的参数需要执行不同函数。

在可选项众多的情况下如果使用if/else逐个判断的话,会使代码极度丑陋,不够优雅。

python如何优雅的根据字符串决定函数执行

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行代码,而且以后如果有扩展的话,也不会影响这里的代码扩展性。可谓是十分优雅。

如果涉及多个类的话,也可以多传递几个参数来进行控制,实现多个类函数的执行。

注:该方法只使用类的成员函数,对于普通的静态函数并不适用。


如果使用有什么问题,欢迎留言交流~

Tags:

最近发表
标签列表