Python如何根据条件更改指令顺序

2024-10-02 02:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于Python代码的问题。有没有办法做到以下几点:

if conditon:
    A(**paramsA)
    B(**paramsB)
else:
    B(**paramsB)
    A(**paramsA)

不需要重复A()和B()来使它更干净

谢谢


Tags: 代码ifelse办法conditonparamsbparamsa
3条回答

我会这样做:

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值,以查看它是否适用于您

我在这里看到的最大好处是,代码解释了它在做什么。它首先根据条件定义调用顺序,然后按给定顺序执行这些调用。 它也很容易扩展

将A和B封装在函数中,然后可以执行以下操作:

if condition:
    first, second = A, B
else:
    first, second = B, A

first()
second()

考虑到你的代码是绝对好的,我们不能做得更好,因为它是可以理解的。尽管如此,我们仍然可以通过以下方式获得一些风格点并制造一些敌人:

f1, f2 = [A, B][::(-1)**condition]
f1()
f2()

处理不同的参数也可以通过微小的调整来实现

(f1, p1), (f2, p2) = [(A, paramA), (B, paramB)][::(-1)**condition]
f1(**p1)
f2(**p2)

示例(假设'foo''bar'是参数12是函数):

>>> [(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)-1condition前面放置一个not

相关问题 更多 >

    热门问题