调用与输入同名的函数?

2024-04-19 08:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

python中有没有一种方法(不使用switch语句或if和数组)调用与输入同名的函数。E、 g

x=input("string input")

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

如果x"foo",我想调用foo()


Tags: 方法函数inputstringiffoodefbar
3条回答

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

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

按你的要求做是可能的,但通常不是一个好主意。eval()几乎可以被任何用户用来对您的计算机执行任何操作(它执行传递给它的任意代码)。使用locals()切分到局部变量列表并不能保证不会抛出异常,而且与任意代码执行相关的安全问题也存在。更好的方法是创建一个字典,将函数映射到字符串,作为用户选择的选项。。。你知道吗

def foo():
    pass
def bar():
    pass
def baz():
    pass

dict_of_functions = {'foo': foo, 'bar': bar, 'baz': baz}

choice = raw_input('select a function') #just input() for python 3.x

chosen_func = dict_of_functions[choice]

chosen_func()

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

重要的是,您可以轻松地更改预期的输入或函数名—这些名称是分离的(“解耦”)。您还知道恶意用户不能调用任何其他函数。你知道吗

相关问题 更多 >