Python 3:使str对象可调用

时间:2014-04-20 01:01:28

标签: python string object callable

我有一个用户输入的Python程序。我存储用户输入一个名为" userInput"的字符串变量。我希望能够调用用户输入的字符串...

userInput = input("Enter a command: ")
userInput()

由此,我收到错误:TypeError:' str'对象不可调用

目前,我的程序是这样的:

userInput = input("Enter a command: ")
if userInput == 'example_command':
    example_command()

def example_command():
     print('Hello World!')

显然,这不是一种处理大量命令的非常有效的方法。 我想让str obj可以调用 - 无论如何这样做?

1 个答案:

答案 0 :(得分:17)

更好的方法可能是使用dict:

def command1():
    pass

def command2():
    pass

commands = {
    'command1': command1,
    'command2': command2
}

user_input = input("Enter a command: ")
if user_input in commands:
    func = commands[user_input]
    func()

    # You could also shorten this to:
    # commands[user_input]()
else:
    print("Command not found.")

基本上,您提供了文字命令与您可能想要运行的函数之间的映射。

如果输入太多,您还可以使用local关键字,这将返回当前范围内当前定义的每个函数,变量等的字典:

def command1():
    pass

def command2():
    pass

user_input = input("Enter a command: ")
if user_input in locals():
    func = locals()[user_input]
    func()

但这并不完全安全,因为恶意用户可以输入与变量名称相同的命令,或者您不希望它们运行的​​某些功能,并最终导致代码崩溃。