例如,如果我有一个名为 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/