调用与输入同名的函数?

时间:2017-11-06 18:11:17

标签: python string function

在python中是否有一种方法(不使用switch语句或者是否使用数组)来调用与输入同名的函数。 E.g。

x=input("string input")

def foo():
    print("foo")
def bar():
    print("bar")

如果x"foo",我想致电foo()

4 个答案:

答案 0 :(得分:2)

做你所要求的是可能的,但通常不是一个好主意。 dist几乎可以轻易地用于任何用户对您的计算机执行任何操作(它实际上执行传递给它的任意代码)。使用eval()切换到本地变量列表并不能保证不抛出异常,并且有自己的安全问题与任意代码执行有关。更好的方法是创建一个字典,将函数映射到字符串作为用户选择的选项...

locals()

答案 1 :(得分:1)

您要求的问题是您混合使用两种语言:程序语言和用户使用的语言。正如@Aaron所提到的,你可以使用字典,在这两种语言之间进行映射(见那里)。

重要的是,您可以轻松更改预期输入或功能名称 - 这些是分开的(“解耦”)。您还知道恶意用户无法调用任何其他功能。

答案 2 :(得分:0)

由于潜在的安全风险,这是一个糟糕的主意。想象一下,人们可以决定在您的计算机中执行的任何功能。

您应该始终定义允许执行功能的边界。即将字典映射命令字符串定义为函数{"cmd": func}这也很好地封装了命令名,可以更改基础函数而不会向用户公开这样的更改

答案 3 :(得分:0)

如果函数是在全局范围内定义的,则可以在全局命名空间字典中查找,您可以使用函数globals()访问该字典:

f = globals().get(x)
if f:
  f()
else:
  print("Function %s not found" % x)