如何使用用户输入在Python中调用函数?

时间:2013-05-18 14:37:45

标签: python function

我有几个功能,例如:

def func1():
    print 'func1'

def func2():
    print 'func2'

def func3():
    print 'func3'

然后我要求用户使用choice = raw_input()输入他们想要运行的功能,并尝试使用choice()调用他们选择的功能。如果用户输入func1而不是调用该函数,则会给出一个错误'str' object is not callable。无论如何,他们是否可以将“选择”转变为可赎回价值?

3 个答案:

答案 0 :(得分:8)

错误是因为函数名不是字符串,你不能调用像'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)()

答案 1 :(得分:3)

如果你制作一个更复杂的程序,那么使用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)。

答案 2 :(得分:1)

您可以使用locals

>>> def func1():
...     print 'func1 - call'
... 
>>> def func2():
...     print 'func2 - call'
... 
>>> def func3():
...     print 'func3 - call'
... 
>>> choice = raw_input()
func1
>>> locals()[choice]()
func1 - call