我有一个关于Python代码的问题。有没有办法做到以下几点:
if conditon:
A(**paramsA)
B(**paramsB)
else:
B(**paramsB)
A(**paramsA)
不重复A((和B((使其更干净?
谢谢!
鉴于您的代码非常好,我们在理解方面做得再好不过了。尽管如此,我们仍然可以获得一些风格点,并在使用以下功能时制造一些敌人:
f1, f2 = [A, B][::(-1)**condition]
f1()
f2()
处理不同的参数也可以通过小的调整来方便
(f1, p1), (f2, p2) = [(A, paramA), (B, paramB)][::(-1)**condition]
f1(**p1)
f2(**p2)
示例(假设'foo'
和'bar'
是参数,1
和2
是函数(:
>>> [(1, 'foo'), (2, 'bar')][::(-1)**False]
[(1, 'foo'), (2, 'bar')]
>>> [(1, 'foo'), (2, 'bar')][::(-1)**True]
[(2, 'bar'), (1, 'foo')]
当然,您不希望生产代码有这样的东西。
请注意,按照目前的情况,如果condition
的求值结果为True
,则首先执行B
。如果希望相反,请将(-1)**(condition)
更改为2*(condition)-1
或在condition
前面放一个not
。
在函数中换行A和B,然后可以执行:
if condition:
first, second = A, B
else:
first, second = B, A
first()
second()
我会这样做:
flag = True
def myFuncA( a, b ):
return a * b
def myFuncB( a, b ):
return a -b
# define the order of calls based on flag
if flag:
functionSequence = [myFuncA, myFuncB]
else:
functionSequence = [myFuncB, myFuncA]
# call function in the given order
for curFunc in functionSequence:
print( curFunc(3,4))
更改测试的Flag值,看看它是否适用于您。
我在这里看到的最大好处是,代码解释了它的作用。它首先根据条件定义调用的顺序,然后按照给定的顺序执行这些调用。它也很容易扩展。