如何使用用户输入在 Python 中调用函数? [复制]
Posted
技术标签:
【中文标题】如何使用用户输入在 Python 中调用函数? [复制]【英文标题】:How do I use user input to invoke a function in Python? [duplicate] 【发布时间】:2013-05-13 14:10:23 【问题描述】:我有几个功能,例如:
def func1():
print 'func1'
def func2():
print 'func2'
def func3():
print 'func3'
然后我要求用户使用choice = raw_input()
输入他们想要运行的函数,并尝试使用choice()
调用他们选择的函数。如果用户输入 func1 而不是调用该函数,它会给我一个错误,上面写着'str' object is not callable
。无论如何,我是否可以将“选择”变成可调用的值?
【问题讨论】:
【参考方案1】:错误是因为函数名不是字符串你不能像'func1'()
这样调用函数它应该是func1()
,
你可以这样做:
'func1': func1,
'func2': func2,
'func3': func3,
.get(choice)()
通过将字符串映射到函数引用
旁注:您可以编写一个默认函数,例如:
def notAfun():
print "not a valid function name"
并改进您的代码,例如:
'func1': func1,
'func2': func2,
'func3': func3,
.get(choice, notAfun)()
【讨论】:
对于 OP:这将是 run time polymorphism 的一个例子!!在 Python 中【参考方案2】:如果您制作更复杂的程序,使用 Python 标准库中的 cmd 模块可能比编写一些东西更简单。 您的示例将如下所示:
import cmd
class example(cmd.Cmd):
prompt = '<input> '
def do_func1(self, arg):
print 'func1 - call'
def do_func2(self, arg):
print 'func2 - call'
def do_func3(self, arg):
print 'func3 - call'
example().cmdloop()
一个示例会话是:
<input> func1
func1 - call
<input> func2
func2 - call
<input> func3
func3 - call
<input> func
*** Unknown syntax: func
<input> help
Undocumented commands:
======================
func1 func2 func3 help
当你使用这个模块时,当用户输入没有do_
的名称时,每个名为do_*
的函数都会被调用。还会自动生成帮助,您可以将参数传递给函数。
有关这方面的更多信息,请查看 Python 手册 (here) 或 Python 3 版本的手册示例 (here)。
【讨论】:
【参考方案3】:您可以使用locals
>>> def func1():
... print 'func1 - call'
...
>>> def func2():
... print 'func2 - call'
...
>>> def func3():
... print 'func3 - call'
...
>>> choice = raw_input()
func1
>>> locals()[choice]()
func1 - call
【讨论】:
或更一般地说,globals
以上是关于如何使用用户输入在 Python 中调用函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章