【发布时间】:2013-01-22 20:59:53
【问题描述】:
我有一些如下所示的代码:
if command == 'a':
do_a(a, b, c)
elif command == 'b':
do_b(a, b, c)
elif command == 'c':
do_c(a, b, c)
我怎样才能用更优雅的东西代替这种类型的东西?也许,类似于 do_[command](a, b, c) 的东西,被调用的函数取决于命令?
有可能吗?
【问题讨论】:
-
你可能想了解更多关于 Python 闭包 getpython3.com/diveintopython3/generators.html 和
lambda和 Pythonevaldocs.python.org/3.1/library/functions.html#eval (但不要滥用eval) -
类似
eval('do_'+command)(a,b,c)。 -
听起来像是一个函数字典的工作。尽可能避免
eval。 -
不要为此使用
eval。 Eval 对于代码生成(动态定义函数/类)很有用,例如namedtuple()实现,在这种情况下,使用低级 API 构建类会不必要地复杂并模糊代码的意图。在这里,您没有动态定义任何内容,eval会使意图变得不那么清晰。
标签: python