bdh*_*har 113 python if-statement
我有以下代码
num1 = 10
someBoolValue = True
Run Code Online (Sandbox Code Playgroud)
我需要设置的值num1来20如果someBoolValue是True; 否则什么都不做.所以,这是我的代码
num1 = 20 if someBoolValue else num1
Run Code Online (Sandbox Code Playgroud)
有什么事我能避免这个...else num1部分让它看起来更干净吗?相当于
if someBoolValue:
num1 = 20
Run Code Online (Sandbox Code Playgroud)
我尝试用这样的方式替换它...else pass:num1=20 if someBoolValue else pass.我得到的只是语法错误.我也不能省略这...else num1部分.
Fro*_*ost 164
我不认为这在Python中是可能的,因为你实际上想要做的事情可能会扩展到这样的事情:
num1 = 20 if someBoolValue else num1
Run Code Online (Sandbox Code Playgroud)
如果排除else num1,您将收到语法错误,因为我非常确定该作业必须实际返回一些内容.
正如其他人已经提到的那样,你可以做到这一点,但这很糟糕,因为你可能最后会在下次阅读那段代码时感到困惑:
if someBoolValue: num1=20
Run Code Online (Sandbox Code Playgroud)
num1 = someBoolValue and 20 or num1出于同样的原因,我不是一个忠实的粉丝.我必须三思而后行.
实际实现您想要做的事情的最佳方式是原始版本:
if someBoolValue:
num1 = 20
Run Code Online (Sandbox Code Playgroud)
这是最好的verison的原因是因为它非常明显你想做什么,你不会混淆自己,或者其他任何人以后会接触到这些代码.
另外,作为旁注,num1 = 20 if someBoolValue是有效的Ruby代码,因为Ruby的工作方式略有不同.
gig*_*mon 40
用这个:
num1 = 20 if someBoolValue else num1
Run Code Online (Sandbox Code Playgroud)
Adn*_*n Y 39
对于 Google 未来的时间旅行者,这是一种新方法(从 Python 3.8 开始提供):
\nb = 1\nif a := b:\n # this section is only reached if b is not 0 or false.\n # Also, a is set to b\n print(a, b)\nRun Code Online (Sandbox Code Playgroud)\n这被称为“海象运算符”。更多信息请参阅Python 3.8 中的 What\xe2\x80\x99s 新功能页面。
\nDeb*_*ski 19
在一行中:
if someBoolValue: num1 = 20
Run Code Online (Sandbox Code Playgroud)
但是不要这样做.通常不期望这种风格.为了清晰和一致,人们更喜欢较长的形式.
if someBoolValue:
num1 = 20
Run Code Online (Sandbox Code Playgroud)
(同样,应该避免使用驼峰帽.所以请使用some_bool_value.)
请注意,不存在没有部件的内联表达式 some_value if predicate,else因为如果谓词为false,则不会有返回值.但是,在所有情况下,表达式必须具有明确定义的返回值.这与Ruby或Perl中的用法不同.
小智 13
您可以使用以下之一:
(falseVal, trueVal)[TEST]
TEST and trueVal or falseVal
Run Code Online (Sandbox Code Playgroud)
不,我想你希望有类似的东西num1 = 20 if someBoolValue可行,但事实并非如此.我认为最好的方法是使用if你写的声明:
if someBoolValue:
num1 = 20
Run Code Online (Sandbox Code Playgroud)
num1 = 10 + 10*(someBoolValue is True)
Run Code Online (Sandbox Code Playgroud)
这是我新的最终答案。先前的答案如下,对于上述问题来说太过分了。Getting_too_clever == not Good。这是先前的答案......如果你想为Truecond添加一件事,为另一件事添加另一件事,那仍然很好False:
num1 = 10 + (0,10)[someBoolValue is True]
Run Code Online (Sandbox Code Playgroud)
你提到的num1已经有一个应该单独留下的值。我假设num1 = 10因为这是帖子的第一条语句,所以要到达的操作20是添加10.
num1 = 10
someBoolValue = True
num1 = 10 + (0,10)[someBoolValue is True]
print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')
Run Code Online (Sandbox Code Playgroud)
产生了这个输出
num1 = 20
someBoolValue = True
Run Code Online (Sandbox Code Playgroud)
如果你肯定会遇到一行代码,Python 3.8引入了被亲切地称为“海象运算符”的赋值表达式。
:=
someBoolValue and (num := 20)
Run Code Online (Sandbox Code Playgroud)
如果第一个布尔表达式是,20则将分配给。此处的赋值必须在括号内,否则会出现语法错误。numTrue
num = 10
someBoolValue = True
someBoolValue and (num := 20)
print(num) # 20
num = 10
someBoolValue = False
someBoolValue and (num := 20)
print(num) # 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208620 次 |
| 最近记录: |