小编典典

一行 if 条件赋值

all

我有以下代码

num1 = 10
someBoolValue = True

我需要将值设置num120if someBoolValueis True; 否则什么也不做。所以,这是我的代码

num1 = 20 if someBoolValue else num1

有没有什么办法可以避免这...else num1部分让它看起来更干净?相当于

if someBoolValue:
    num1 = 20

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


阅读 158

收藏
2022-08-03

共1个答案

小编典典

我认为这在 Python 中是不可能的,因为您实际尝试做的事情可能会扩展为如下内容:

num1 = 20 if someBoolValue else num1

如果你 exclude else num1,你会收到一个语法错误,因为我很确定这个赋值实际上必须返回一些东西。

正如其他人已经提到的那样,您可以这样做,但这很糟糕,因为下次阅读该段代码时您可能最终会感到困惑:

if someBoolValue: num1=20

num1 = someBoolValue and 20 or num1出于完全相同的原因,我不是它的忠实粉丝。实际上,我必须三思而后行。

实际实现您想要做的最好方法是原始版本:

if someBoolValue:
    num1 = 20

这是最好的版本的原因是因为它非常明显你想要做什么,你不会混淆自己,或者以后会接触到该代码的任何人。

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

2022-08-03