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/

相关文章:

linux - 如何在我项目的所有功能的enter入口和return指令前加一句。谢谢

javascript - 如何在全局和 Element 原型(prototype)中使用 JavaScript 函数?

Python HTTP 服务器发送 JSON 响应

Python-将列表的字符串值转换为浮点值

c - 如何在C中将a字符串拆分为单独的单词,其中空格不恒定?

java - 从 SQL 插入查询字符串中提取带引号的值

python - opencv 3.2 中 cv2.cv.fromarray 的替代品是什么?

python - 在 Python 中比较字节

python - 打开我的 Pygame 程序的 EXE 时出现导入错误

CodeIgniter 为所有 Controller 调用相同的函数