这个问题在这里已经有了答案:Python 有三元条件运算符吗? (32 个回答) 2 年前关闭。社区在 8 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决
我刚接触 Python,我真的很喜欢简洁的语法。但是,是否有更简单的方法来编写 if
-then
-else
语句以使其适合一行?
例如:
if count == N:
count = 0
else:
count = N + 1
有没有更简单的写法?我的意思是,在 Objective-C 中,我会这样写:
count = count == N ? 0 : count + 1;
Python有类似的东西吗?
更新
我知道在这种情况下我可以使用 count == (count + 1) % N
。
我在问一般语法。
count = count == N ? 0 : N + 1;
而不是 count = count == N ? 0 : count + 1;
吗?
if 1==1: print('hi')
可以这样使用。 '''if 1==1: print('hi')'''
不会打印任何内容!
count == (count + 1) % N
过去做什么。目前它只计算 count == (count + 1)
(自然而然,总是会产生 False
)。我检查了 Python 3.6.1 和 Python 2.7.10。
这比 if-then 更具体地说是一个 ternary operator 表达式,这是 python 语法
value_when_true if condition else value_when_false
更好的例子:(感谢 Mr. Burns)
'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
此外,您仍然可以使用“普通”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))
Yes: if x == 4: print x, y; x, y = y, x
我猜,你知道的,大地精之类的。
count = 0 if count == N else N+1
- 三元运算符。尽管我会说您的解决方案比这更具可读性。
一般三元语法:
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]()
(False, True) == (0, 1)
保证(但未检查)的实现细节。虽然简洁,但它不会赢得任何可读性奖项。您也可以在 C 中执行 "abcdefg"[i]
,但这并不意味着您应该这样做。
{N: 0}.get(count, N+1)
。第三种方式,如果 N+1
是一些昂贵的功能:{N: 0}.get(count, "anything truthy") and f(N)
。这需要你知道dict的值的真实性,并且它们都需要具有相同的真实性。如果这些值都是真实的,则反转布尔运算符,例如 {0: 7}.get(weekday, False) or f(weekday)
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
使用您的代码片段,它会变成,
count = 0 if count == N else N + 1
不定期副业成功案例分享
print('matched!' if re.match(r'\d{4,}', '0aa9') else "nopes")
(假设您重新导入)Yes' if fruit == 'Apple' else print('No Apple')
) 一起使用,但不能与关键字 ('Yes' if fruit == 'Apple' else raise Exception('No Apple')
) 一起使用