提问人:Abizern 提问时间:5/10/2010 最后编辑:Mateen UlhaqAbizern 更新时间:7/25/2023 访问量:2399065
将简单的 if-then-else 语句放在一行上 [duplicate]
Putting a simple if-then-else statement on one line [duplicate]
问:
如何在 Python 中编写 -- 语句以使其适合一行?if
then
else
例如,我想要一个单行版本:
if count == N:
count = 0
else:
count = N + 1
在 Objective-C 中,我会这样写:
count = count == N ? 0 : count + 1;
答:
2499赞
cmsjr
5/10/2010
#1
这更具体地说是一个三元运算符表达式,而不是 if-then,这是 python 语法
value_when_true if condition else value_when_false
更好的例子:(感谢伯恩斯先生)
'Yes' if fruit == 'Apple' else 'No'
现在有赋值并与 if 语法对比
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
与
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
评论
3赞
uchuugaka
5/20/2016
这很像理解。你可以这样做:(假设你导入了 re)print('matched!' if re.match(r'\d{4,}', '0aa9') else "nopes")
11赞
Torben
10/28/2016
请注意,速记语法仅对实际值有效。您可以将它与常量和函数 () 一起使用,但不能与关键字 (Yes' if fruit == 'Apple' else print('No Apple')
'Yes' if fruit == 'Apple' else raise Exception('No Apple')
)
7赞
Miro
2/14/2017
我不清楚我是否可以省略其他内容,如果水果==“苹果”,我可以只说“是”吗?
16赞
cmsjr
2/15/2017
使用三元形式时不能省略 else,这会导致语法错误,但您可以在一行中执行正常操作,我更新了示例以进行说明。
4赞
Brōtsyorfuzthrāx
8/22/2017
通过使用多行 if 语句将此方法与同一事物进行对比,可以使此答案受益。
169赞
Tim Pietzcker
5/10/2010
#2
count = 0 if count == N else N+1
- 三元运算符。虽然我会说你的解决方案比这更可读。
评论
0赞
korchix
11/11/2021
我更喜欢你的回答,它简单而简短
146赞
mshsayem
5/10/2010
#3
一般三元语法:
value_true if <test> else value_false
另一种方式可以是:
[value_false, value_true][<test>]
例如:
count = [0,N+1][count==N]
这将在选择一个分支之前评估两个分支。要仅评估所选分支,请执行以下操作:
[lambda: value_false, lambda: value_true][<test>]()
例如:
count = [lambda:0, lambda:N+1][count==N]()
评论
5赞
msw
5/10/2010
这依赖于一个我不知道是保证(但没有检查)的实现细节。虽然简洁,但它不会赢得任何可读性奖项。你也可以用C语言做,但这并不意味着你应该这样做。(False, True) == (0, 1)
"abcdefg"[i]
10赞
Mark Dickinson
5/11/2010
@msw:这是有保证的,并且:这里没有实现细节。:)请参阅 docs.python.org/reference/ 下的“布尔值”标题...False == 0
True == 1
14赞
tstenner
5/11/2010
但是,无论 [<test>] 是什么,这两个值都不是计算出来的吗?
1赞
mshsayem
5/11/2010
@msw:嗯,说到三元运算,我总是更喜欢第一种。我只是展示了另一种可能的方法......
1赞
Jonas Kölker
11/12/2013
另一种方式:.第三种方式,如果是一些昂贵的函数:.这要求您知道字典值的真实性,并且它们都需要具有相同的真实性。如果值都为真值,则反转布尔运算符,例如{N: 0}.get(count, N+1)
N+1
{N: 0}.get(count, "anything truthy") and f(N)
{0: 7}.get(weekday, False) or f(weekday)
29赞
phoenix24
5/10/2010
#4
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
使用您的代码片段,它将变成,
count = 0 if count == N else N + 1
295赞
Johannes Braunias
7/7/2012
#5
此外,您仍然可以使用“普通”语法并将其与冒号混为一行。if
if i > 3: print("We are done.")
或
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
评论
13赞
keithhackbarth
12/21/2013
有人可以解释为什么这不是最好的答案吗?恕我直言,它绝对是最容易阅读的。
68赞
adam.r
5/30/2014
该问题包括一个“其他”条件
15赞
Ricky Wilson
7/12/2014
@johannes-braunias 您的方法违反了 PEP8 标准。
32赞
PProteus
8/30/2018
PEP8 不是神圣的。如果你的程序使用这种语法会更好,那很好。
评论