【发布时间】:2015-05-28 11:52:08
【问题描述】:
我目前正在构建一个应用程序,在该应用程序中,我需要迭代一系列基本完成相同操作的步骤,只节省非常少量的代码(约 15 行)。步骤的数量会因项目的配置方式而异,因此为每个潜在实例创建单独的函数对我来说似乎有点愚蠢。
在 JavaScript 中,我会这样做:
var switches = [true, true, false, true];
var holder = {
0: function() { /* do step0 */ }
1: function() { /* do step1 */ }
2: function() { /* do step2 */ }
3: function() { /* do step3 */ }
// ...etc...
}
for (var i = 0; i < switches.length; i++)
if (switches[i])
holder[i]();
有没有办法在 python 中做类似的事情?我唯一能想到的是这样的:
switches = [True, True, False, True]
class Holder(object):
@staticmethod
def do_0():
# do step0
@staticmethod
def do_1():
# do step 1
# ...etc...
def __repr__(self):
return [self.do_0, self.do_1, ...]
for action in Holder:
action()
如果我有大量的步骤,这似乎非常低效。有没有更好的方法来解决这个问题?
【问题讨论】:
-
一个装饰器可能更符合你的要求
-
最好的方法是什么?如果我使用相同的装饰器定义所有函数,是否有任何简单的方法来循环它们而不创建要循环的列表?
标签: javascript python arrays dictionary data-structures