小编典典

如何在python中将字符串转换为函数名称?

python

例如,如果我有一个add像这样的函数

def add(x,y):
    return x+y

我希望能够将字符串或输入转换为直接指向该函数,例如

w=raw_input('Please input the function you want to use')

要么

w='add'

有什么方法可以使用w来引用函数add吗?


阅读 467

收藏
2020-12-20

共1个答案

小编典典

由于要接受用户输入,因此最安全的方法是准确定义有效输入:

dispatcher={'add':add}
w='add'
try:
    function=dispatcher[w]
except KeyError:
    raise ValueError('invalid input')

如果要评估像这样的字符串'add(3,4)',则可以使用安全的eval

eval('add(3,4)',{'__builtins__':None},dispatcher)

eval通常,将其应用于用户输入时可能会很危险。
由于__builtins__已禁用,locals并且限制为,因此上述方法更安全dispatcher。比我聪明的人可能仍然会造成麻烦,但是我无法告诉您该怎么做。

警告: 即使eval(..., {'__builtins__':None}, dispatcher)不安全的
将被施加到用户输入。如果有机会让恶意用户对自己的字符串进行评估,则恶意用户可以在您的计算机上运行任意功能eval

2020-12-20