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

Python—如何根据条件更改指令顺序,python,if-statement,Python,If Statement,我有一个关于Python代码的问题。有没有办法做到以下几点: 如果条件: A**paramsA B**参数B 其他: B**参数B A**paramsA 不重复A和B使它更干净 谢谢 在函数中包装A和B,然后您可以执行以下操作: if condition: first, second = A, B else: first, second = B, A first() second() 将A和B封装在函数中,然后可以执行以下操作: if condition: first

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

如果条件: A**paramsA B**参数B 其他: B**参数B A**paramsA 不重复A和B使它更干净


谢谢

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

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

first()
second()

将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”是参数,1和2是函数:

>>> [(1, 'foo'), (2, 'bar')][::(-1)**False]
[(1, 'foo'), (2, 'bar')]
>>> [(1, 'foo'), (2, 'bar')][::(-1)**True]
[(2, 'bar'), (1, 'foo')]
当然,您不希望在生产代码中使用类似的内容


请注意,就目前情况而言,若条件的计算结果为True,则首先执行B。如果您希望相反,请将-1**condition更改为2*condition-1,或者在您的condition前面加一个not。

鉴于您的代码非常好,我们无法更好地理解它。尽管如此,我们仍然可以通过以下方式获得一些风格点并制造一些敌人:

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')]
当然,您不希望在生产代码中使用类似的内容

请注意,就目前情况而言,若条件的计算结果为True,则首先执行B。如果您希望它是另一种方式,请将-1**条件更改为2*条件-1,或者在您的条件前面加一个not。

我会这样做:

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

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

我会这样做:

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

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

有很多方法。但是你能更深入地讨论你的具体问题吗?你好@L3viathan,谢谢你的回答。我需要在我的keras模型中导入权重,但有时,我需要在构建新层之前添加这些权重,有时我需要在构建新层之后添加这些权重。所以它就像:`if条件:load\u weights add\u layers否则:add\u layers load\u weights`可能有很多方法。但是你能更深入地讨论你的具体问题吗?你好@L3viathan,谢谢你的回答。我需要在我的keras模型中导入权重,但有时,我需要在构建新层之前添加这些权重,有时我需要在构建新层之后添加这些权重。所以它就像:`if条件:load\u weights add\u layers其他:add\u layers load\u weights`Hi@orlp,谢谢你的回答!我只是忘了指出A和B有不同的参数,很抱歉,我会更新postHi@orlp,谢谢你的回答!我只是忘了确定A和B有不同的参数,很抱歉,我会更新postMakes感知,谢谢@Ma0,我会继续使用我的代码!我只是问,当重构时,如果我想更改a或B中的一个参数,我必须在两个地方更改它,这并不坏,但我认为我可以做得更好:为什么?您可以在if循环之前定义参数,然后只参考它。这很有意义,谢谢@Ma0,我将继续使用我的代码!我只是问,当重构时,如果我想更改a或B中的一个参数,我必须在两个地方更改它,这并不坏,但我认为我可以做得更好:为什么?您可以在if循环之前定义参数,然后只参考它。