我目前正在构建一个应用程序,我需要迭代一系列基本执行相同操作的步骤,从而节省很少量的代码(约 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()
如果我有大量步骤,这看起来效率非常低。有没有更好的方法来解决这个问题?
您可以按如下方式执行此操作:
# define your functions
def fun1():
print("fun1")
def fun2():
print("fun2")
def fun3():
print("fun3")
switches = [True, False, True];
# put them in a list (list makes more sense than dict based on your example)
func_list = [fun1, fun2, fun3]
# iterate over switches and corresponding functions, and execute
# functions when s is True
for s,f in zip(switches, func_list):
if s: f()
这只是一种方法。还有很多其他的。例如根据需要使用 lambda、dict 等。
如果你的函数只有一行,要使用 lambda,你可以这样做:
func_list = [lambda: print("lambda1"),
lambda: print("lambda2"),
lambda: print("lambda1")]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)