python - 我有一个字符串,其内容是函数名,Python中如何引用对应的函数?

标签 python string function string-evaluation

例如,如果我有一个名为 add 的函数,例如

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

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

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

w='add'

有没有什么办法可以用w来引用函数add

最佳答案

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

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

如果你想计算像 'add(3,4)' 这样的字符串,你可以使用 safe eval :

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

eval 通常在应用于用户输入时可能是危险的。 由于 __builtins__ 被禁用并且 locals 被限制为 dispatcher,所以上面的方法更安全。比我聪明的人也许还能制造麻烦,但我不能告诉你怎么做。

警告: 甚至 eval(..., {'__builtins__':None}, dispatcher)不安全 可应用于用户输入。恶意用户could run arbitrary functions on your machine如果有机会让 eval 评估他的字符串。

关于python - 我有一个字符串,其内容是函数名,Python中如何引用对应的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719466/

相关文章:

Python 多进程队列 get() block

python - 在 Tkinter 中动态更改小部件背景颜色

c++ - boost::filesystem::path::string() 输出的奇怪行为

java - 如何在 Java 中比较字符串?

C函数调用奇怪错误

php - register_shutdown_function 覆盖

python - 为什么 Python 中的命名表达式需要专用语法(:=, 海象运算符)?

python - 使用 Python 中的正则表达式清理数字中的逗号

php - 如何在php中显示有限的单词

python - 将模块启动到 python 菜单中