Python 变量函数定义

2 投票
1 回答
667 浏览
提问于 2025-04-16 11:16

首先,请不要对我发火,如果这个问题已经有人问过了 - 我找过,但没有找到答案。

我有一个Python文件(叫做 rpc.py),里面有很多函数用来处理AJAX请求。比如说:

def test(self, vars):
    return vars['id']

def test2(self, vars):
    return vars['id']+1

这个文件是通过一个类似这样的URL来调用的:

rpc.py?fnc=test2&id=4

我想调用那个和 'fnc' 查询参数匹配的函数,并把整个查询字符串传递给 'vars'

所以我想要的就是类似下面这样的“伪代码”:

vars = cgi.FieldStorage()
print "Content-Type: text/html\n\n"
print eval('vars["fnc"].value(vars)')

有没有什么想法呢?

1 个回答

6

你可以使用

getattr(server, vars["fnc"])(vars)

不过我还建议给服务名称加个前缀(比如“do_test”),这样可以避免恶意代码通过简单传递名称来调用服务器对象的任何方法(包括你认为不应该被调用的方法)。在这种情况下,它会是

getattr(server, "do_" + vars["fnc"])(vars)

撰写回答