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

本问题已经有最佳答案,请猛点这里访问。

我有几个功能,如:

1
2
3
4
5
6
7
8
def func1():
    print 'func1'

def func2():
    print 'func2'

def func3():
    print 'func3'

然后我要求用户输入他们想使用choice = raw_input()运行的函数,并尝试使用choice()调用他们选择的函数。如果用户输入func1而不是调用该函数,它会给我一个错误,上面写着'str' object is not callable。无论如何,我是否应该将"choice"转换为可调用的值?


这个错误是因为函数名不是字符串你不能像'func1'()那样调用函数它应该是func1()

你可以这样做:

1
2
3
4
5
{
'func1':  func1,
'func2':  func2,
'func3':  func3,
}.get(choice)()

它通过将字符串映射到函数引用

注:你可以写一个默认函数如下:

1
2
def notAfun():
  print"not a valid function name"

改进你的代码如下:

1
2
3
4
5
{
'func1':  func1,
'func2':  func2,
'func3':  func3,
}.get(choice, notAfun)()


如果您编写一个更复杂的程序,那么使用Python标准库中的cmd模块可能比编写一些东西更简单。你的例子应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

一个例子是:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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手册(这里)或手册的Python 3版本的示例(这里)。


可以使用locals

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> def func1():
...     print 'func1 - call'
...
>>> def func2():
...     print 'func2 - call'
...
>>> def func3():
...     print 'func3 - call'
...
>>> choice = raw_input()
func1
>>> locals()[choice]()
func1 - call