条件赋值一行

我有以下密码

num1 = 10
someBoolValue = True

如果 someBoolValueTrue,则需要将 num1的值设置为 20; 否则不做任何操作。这是我的代码

num1 = 20 if someBoolValue else num1

有没有办法可以避免 ...else num1的部分,使它看起来更干净

if someBoolValue:
num1 = 20

我试着用 ...else pass代替它,像这样: num1=20 if someBoolValue else pass。我得到的只是语法错误。我也不能省略 ...else num1部分。

420609 次浏览

一句话:

if someBoolValue: num1 = 20

但是不要这样做。这种风格通常是不被期待的。人们更喜欢较长的形式,以便清晰和一致性。

if someBoolValue:
num1 = 20

(同样,应避免使用骆驼帽,因此应使用 some_bool_value。)

注意,不包含 else部分的内联 表情 some_value if predicate不存在,因为如果谓词为 false,则不会有返回值。但是,在所有情况下,表达式必须具有明确定义的返回值。这与 Ruby 或 Perl 中的用法不同。

没有。我猜你希望像 num1 = 20 if someBoolValue这样的东西能起作用,但它没有。我认为最好的办法是按照你所写的 if声明:

if someBoolValue:
num1 = 20

用这个:

num1 = 20 if someBoolValue else num1

我认为这在 Python 中是不可能的,因为你实际上正在尝试做的事情可能会扩展成这样:

num1 = 20 if someBoolValue else num1

如果排除 else num1,您将收到一个语法错误,因为我非常确定赋值必须实际返回一些内容。

正如其他人已经提到的,您可以这样做,但是这样做很糟糕,因为下次阅读这段代码时,您可能会迷惑自己:

if someBoolValue: num1=20

出于同样的原因,我不太喜欢 num1 = someBoolValue and 20 or num1。我得好好想想这句台词是什么意思。

实现你想要做的事情的最佳方式是原始版本:

if someBoolValue:
num1 = 20

最好的版本之所以是最好的版本,是因为你想要做的事情非常明显,而且你不会迷惑你自己,或者任何其他人以后会接触到那些代码。

另外,值得注意的是,num1 = 20 if someBoolValue是有效的 Ruby 代码,因为 Ruby 的工作方式有所不同。

num1 = 20 * someBoolValue or num1

你可使用下列其中一种方法:

(falseVal, trueVal)[TEST]


TEST and trueVal or falseVal
num1 = 10 + 10*(someBoolValue is True)

这是我新的最终答案。 先前的回答如下,对于所陈述的问题是过分的。越来越聪明 = = not Good。这是先前的答案... 仍然很好,如果你想为 True秒添加一个东西,为 False添加另一个:

num1 = 10 + (0,10)[someBoolValue is True]

您提到的 num1应该已经有一个值,不应该再去管它。我假设是 num1 = 10,因为这是文章的第一个语句,所以到 20的操作是添加 10

num1 = 10
someBoolValue = True


num1 = 10 + (0,10)[someBoolValue is True]


print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')

产生了这个输出

num1 = 20
someBoolValue = True

如果需要,您完全可以使用 num1 = (20,如果有其他的 BooolValue num1)。

这是我的建议。 使用另一个变量派生 if 子句并将其赋给 num1。

密码:

num2 =20 if someBoolValue else num1
num1=num2

另一种方式 num1 = (20*boolVar)+(num1*(not boolVar))

如果希望在布尔值为 true 时调用方法,可以使用 else None来终止三进制。

>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>

你可以这样做。

try:
a = [i for i in [20] if False][0]
except IndexError:
print("Do what ever you want here")

您可以通过这种方式解决问题,但是使用“ try/竹篮打水一场空”并不是 Python 的最佳实践。

对于 Google 未来的时间旅行者来说,这里有一个新的方法(可以从 Python 3.8开始使用) :

b = 1
if a := b:
# this section is only reached if b is not 0 or false.
# Also, a is set to b
print(a, b)

如果一行代码肯定会发生在您身上,Python 3.8会引入 赋值表达式赋值表达式,人们亲切地称之为“海象操作符”。

:=

someBoolValue and (num := 20)

如果第一个布尔表达式是 True,则 20将被分配给 num。赋值必须在这里的括号内,否则将得到一个语法错误。

num = 10
someBoolValue = True


someBoolValue and (num := 20)
print(num) # 20


num = 10
someBoolValue = False


someBoolValue and (num := 20)
print(num) # 10