可调用的Python输入?
有没有可能做到这一点:可调用的Python输入?,python,python-3.x,Python,Python 3.x,有没有可能做到这一点: recognized = input("COMMAND: ") if recognized == "command": co = input("Input: ") co() 这给了我“TypeError:'str'对象不可调用”从input()返回的所有内容都是字符串。可以使用调用本地定义的函数 locals()['my_function']() 如果要在字符串中执行该语句,可以使用exec(co),但不建议这样做。您基本上允许任何代码在系统上运行,这可能是一个巨大的
recognized = input("COMMAND: ")
if recognized == "command":
co = input("Input: ")
co()
这给了我“TypeError:'str'对象不可调用”从
input()返回的所有内容都是字符串。可以使用调用本地定义的函数
locals()['my_function']()
如果要在字符串中执行该语句,可以使用exec(co)
,但不建议这样做。您基本上允许任何代码在系统上运行,这可能是一个巨大的安全问题。要定义函数,请使用def
def inputFunc():
return input("input: ")
co = inputFunk()
这将为变量co
提供输入值
或者,如果你想打印输入而不是调用它,就使用这个
co = input("Input: ")
print(co)
这将打印您的输入。使用eval
功能
co = input()
eval(co)
还有一个我喜欢使用的小技巧,当我想对多个输入进行评估或处理时,就是
s = input()
while s != 'the end': ## here you should use something that can't occur
## in python itself in form of function or variable etc.
## here come things you want to do with s, e.g. print(eval(s))
s = input()
你期望co()
的结果是什么(以及对于什么输入)?那么打印(co)
就足够了,否则返回co
。这是我们想要避免的。猜猜他想要什么,直到我们猜对为止…:/Exec可以工作,但您必须将'()'
添加到co
--Exec(co+'()')
——否则函数实际上不会被调用。我不知道为什么这一点在没有评论的情况下被否决,除了人们认为不应该告诉任何人关于exec
。话虽如此,我认为我的答案可能是正确的,特别是如果这个应用程序是供其他人使用的。这并不是他们想要的——他们不想要名为co
,他们想要调用一个字符串名存储在co
@MoxieBall中的函数,我编辑了我的答案。现在看一下?这个答案中的内容都是正确的,但是它们与问题无关,问题是如何通过字符串名调用函数。这是正确的答案。在上下文中,示例代码是locals()[co]()
,它还应该附带一个类似于引用exec的答案中包含的警告