>我有以下代码
num1 = 10
someBoolValue = True
我需要将num1
的值设置为20
,如果someBoolValue
True
;否则什么都不做。所以,这是我的代码
num1 = 20 if someBoolValue else num1
有没有办法避免...else num1
部分以使其看起来更干净?相当于
if someBoolValue:
num1 = 20
我尝试用这样的...else pass
替换它:num1=20 if someBoolValue else pass
.我得到的只是语法错误。我也不能省略...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 if someBoolValue else num1
对于来自 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 中的新增功能页面。
在一行中:
if someBoolValue: num1 = 20
但不要那样做。这种样式通常不是预期的。人们更喜欢较长的形式,以获得清晰和一致。
if someBoolValue:
num1 = 20
(同样,应避免使用骆驼帽。所以宁愿使用some_bool_value
。
请注意,不存在没有else
部分的内联表达式some_value if predicate
因为如果谓词为 false,则不会有返回值。但是,在所有情况下,表达式都必须具有明确定义的返回值。这与Ruby或Perl中的用法不同。
您可以使用以下方法之一:
(falseVal, trueVal)[TEST]
TEST and trueVal or falseVal
如果一行代码肯定会发生在你身上,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
No.我猜你希望像num1 = 20 if someBoolValue
这样的东西会起作用,但它没有。我认为最好的方法是使用您写的if
声明:
if someBoolValue:
num1 = 20
num1 = 10 + 10*(someBoolValue is True)
这是我新的最终答案。先前的答案如下,对于所述问题来说矫枉过正。Getting_too_clever == not Good
. 这是先前的答案...如果您想为 True
cond 添加一件事,为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 * someBoolValue or num1
某个布尔值为真时调用方法,则可以放置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
>>>
这是我能建议的。 使用另一个变量派生 if 子句并将其分配给 num1。
法典:
num2 =20 if someBoolValue else num1
num1=num2
如果你愿意,你绝对可以使用num1 =(如果某个BoolValue else num1,则为20(。
另一种方式 num1 = (20*boolVar)+(num1*(not boolVar))
这样做。
try:
a = [i for i in [20] if False][0]
except IndexError:
print("Do what ever you want here")
你可以通过这种方式解决问题,但是,使用"try/except block"并不是python的最佳实践。