Python3条件变量选择增量

2024-04-28 07:45:54 发布

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

我目前正在从事一个项目,其中有许多不同的会计工作,我经常看到这种模式:

if A > X:
    B += 1
else:
    C += 1

我知道三元运算符,但如果我理解正确,使用它的最短方法是:

B += 1 if A > X else False
C += 1 if A <= X else False

因为三元运算符连接到其头部使用的变量。因此,从计算性和可读性的角度来看,使用三元运算符显然比以前的if/else更糟糕

另一个想法是创建一个简单的函数,如下所示:

conditional_bumper(positive_case_var, negative_case_var, condition_var, compare_to=0)

然后,用法如下所示:

conditional_bumper(B, C, A, X)  # X being optional

因此,我每次看到它都可以写一行,但同时在我看来,这似乎是一个非常“黑客”的解决方案。有没有更好的办法让我看不见


Tags: 项目方法falseifvar模式运算符else
3条回答

如果您真的只需要一行代码,而不关心可读性(您不应该这么做),那么您可以使用这个老把戏(代价是构建一个列表并生成一个有点神秘的代码)

A = 2
B = 0
C = 0
X = 3

CB = [C, B]
print(CB)
CB[A > X] += 1
print(CB)

# [0, 0]
# [1, 0]

请注意CB本身没有修改,更改仅通过CB列表可见

这是因为A > X的计算结果为TrueFalse,这可用于索引bool子类int

使用dict的更好方法

另一个不那么神秘的选择是使用dict。我认为这实际上是一个更好的选择。您甚至可以使用全名:)

A = 2
X = 3

times_a_greater_than_x = {True: 0, False: 0}
times_a_greater_than_x [A > X] += 1
print(times_a_greater_than_x )
# {True: 0, False: 1}

我认为您的代码可读性越高,越好。“一行”代码可以工作,但不可行

增强使用函数的想法:

def inc_if(condition, true_var, false_var):
    if condition:
        true_var += 1
    else:
        false_var += 1

    return (true_var, false_var)


B, C = inc_if(A > X, B, C)

这是非常可读的,因为它可以从左到右读取为“increment if A>;X”,后跟if子句中的变量,最后是else子句中的变量

除非使用全局变量,否则函数需要返回变量并重新赋值

相关问题 更多 >