如何使用用户输入在 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 中调用函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在python子进程模块中执行用户输入(如日期)作为命令[重复]

是否可以根据用户输入导入模块和调用函数? [复制]

如何使用用户输入来调用用户定义的函数?

利用IDA Python静态分析函数调用路径

python中如何调用自己写的函数

在Python中使用字符串调用函数[重复]