本问题已经有最佳答案,请猛点这里访问。
我有几个功能,如:
1 2 3 4 5 6 7 8 | def func1(): print 'func1' def func2(): print 'func2' def func3(): print 'func3' |
然后我要求用户输入他们想使用
这个错误是因为函数名不是字符串你不能像
你可以这样做:
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 |
当您使用这个模块时,当用户输入没有
有关这方面的更多信息,请参阅Python手册(这里)或手册的Python 3版本的示例(这里)。
可以使用
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 |