问题:一行if-condition-assignment
我有以下代码
num1 = 10
someBoolValue = True
我需要将to的值设置num1
为20
if someBoolValue
is True
; 否则就什么也不做。所以,这是我的代码
num1 = 20 if someBoolValue else num1
有什么办法可以避免...else num1
使它看起来更干净的部分吗?相当于
if someBoolValue:
num1 = 20
我尝试将其替换为...else pass
:num1=20 if someBoolValue else pass
。我所得到的只是语法错误。我也不能忽略这一...else num1
部分。
回答 0
我认为这在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的工作方式略有不同。
回答 1
用这个:
num1 = 20 if someBoolValue else num1
回答 2
一行:
if someBoolValue: num1 = 20
但是不要那样做。通常不希望使用此样式。人们更喜欢较长的形式,以保持清晰度和一致性。
if someBoolValue:
num1 = 20
(同样,应避免使用骆驼帽。因此请使用some_bool_value
。)
注意,不存在没有部分的内联表达式 不存在,因为如果谓词为false,则不会有返回值。但是,在所有情况下,表达式必须具有明确定义的返回值。这与Ruby或Perl中的用法不同。some_value if predicate
else
回答 3
您可以使用以下之一:
(falseVal, trueVal)[TEST]
TEST and trueVal or falseVal
回答 4
不,我想您希望类似的方法num1 = 20 if someBoolValue
可以工作,但是不行。我认为最好的方法就是if
编写语句:
if someBoolValue:
num1 = 20
回答 5
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
是add 10
。
num1 = 10
someBoolValue = True
num1 = 10 + (0,10)[someBoolValue is True]
print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')
产生了这个输出
num1 = 20
someBoolValue = True
回答 6
num1 = 20 * someBoolValue or num1
回答 7
如果希望在某个布尔值为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
>>>
回答 8
如果肯定要为您编写一行代码,Python 3.8会引入亲切的表达式,被称为“海象运算符”。
:=
someBoolValue and (num := 20)
如果第一个布尔表达式为,20
则将分配给。赋值必须在括号内,否则会出现语法错误。num
True
num = 10
someBoolValue = True
someBoolValue and (num := 20)
print(num) # 20
num = 10
someBoolValue = False
someBoolValue and (num := 20)
print(num) # 10
回答 9
对于来自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)
回答 10
如果需要,您绝对可以使用num1 =(如果someBoolValue为20,则为num1)。
回答 11
这是我可以建议的。使用另一个变量派生if子句并将其分配给num1。
码:
num2 =20 if someBoolValue else num1
num1=num2
回答 12
其他方式
num1 = (20*boolVar)+(num1*(not boolVar))
回答 13
您可以这样进行。
try:
a = [i for i in [20] if False][0]
except IndexError:
print("Do what ever you want here")
您可以通过这种方式解决问题,但是,使用“ try / except block”不是python的最佳实践。