python怎样把if语句写成一行_python:将一个简单的if-then-else语句放在一行上

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Python Ternary Operator

我刚刚开始学习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;吗?

对于这种特殊情况:count = (count+1) % (N+1)就可以了。

你可以在一行上做if-then。"如果1 = = 1:打印("嗨")"

if 1==1: print('hi')可以这样使用。而且'''if 1==1: print('hi')'''什么也不会打印!

我想知道亚南以前做什么。目前,它只是计算count == (count + 1)(很自然,结果总是False)。我已经检入了Python 3.6.1和Python 2.7.10。

这是一个更具体的三元运算符表达式,而不是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

vs

fruit = 'Apple'

isApple = False

if fruit == 'Apple' : isApple = True

这很像理解。您可以这样做:print('matched!' if re.match(r'\d{4,}', '0aa9') else"nopes")(假设您导入了re)

注意,简写语法只对实际值有效。可以将其用于常量和函数(Yes' if fruit == 'Apple' else print('No Apple')),但不能用于关键字('Yes' if fruit == 'Apple' else raise Exception('No Apple'))

我不清楚是否可以省略else,如果fruit == 'Apple',是否可以只使用'Yes' ?

在使用三元形式时不能忽略else,它会导致语法错误,但是您可以在一行中执行常规if操作,我更新了示例来演示。

在这些语句中可以使用圆括号吗?

通过使用多行if语句将此方法与相同的方法进行比较,可以得到这个答案。

这并没有回答原来的问题"if/else在同一条线上"。-即使它确实回答了特定的例子(三元运算符)。

这行不通。print("" .join(my_list)) if my_list else print("") SyntaxError: invalid syntax返回

但是,看起来您可以使用这种格式:print("" .join(my_list) if my_list else"" )

当您没有其他语句时:when_condition_true if condition else None

为什么不改为:isApple = fruit == 'Apple'

对于值want为布尔值且可以通过比较确定的情况,这没有问题。但是考虑OP场景。count = count == N ?0:计数+ 1;如果count == N,则需要count = 0,否则count + 1。

此外,您仍然可以使用"普通"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))

有人能解释一下为什么这不是最好的答案吗?它绝对是最容易读的。

这个问题包括一个"else"条件

@johannes-braunias你的方法违反了PEP8标准。

PEP8:复合语句(同一行上的多个语句)通常不鼓励使用。

复合语句在shell中不能没有后面的行。用多余的线,你还不如把它们分开。

这是奇怪的。这里有一个来自PEP8的特定的"是"例子。Yes: if x == 4: print x, y; x, y = y, x我想,你知道,妖怪之类的。

PEP8不是圣旨。如果您的程序能更好地使用这种语法,那就很好。

count = 0 if count == N else N+1

-三元运算符。尽管我想说你的解决方案比这个更容易读。

一般三元语法:

value_true if else value_false

另一种方法是:

[value_false, value_true][]

例句:

count = [0,N+1][count==N]

这将在选择一个分支之前评估两个分支。只评估所选的分行:

[lambda: value_false, lambda: value_true][]()

例如:

count = [lambda:0, lambda:N+1][count==N]()

这取决于(False, True) == (0, 1)的实现细节,我不知道该实现细节是否得到了保证(但没有检查)。虽然简洁,但它不会赢得任何可读性奖项。您也可以在C语言中执行"abcdefg"[i],但这并不意味着您应该这样做。

@msw:保证False == 0和True == 1:这里没有实现细节。:)参见docs.python.org/reference/&hellip下的"布尔人"标题;

但是,不管[]是什么,这两个值都不是计算出来的吗?

嗯,说到三元运算,我总是喜欢第一个。我刚刚展示了另一种可能的方法…

另一种方法:{N: 0}.get(count, N+1)。第三种方法,如果N+1是某个昂贵的函数:{N: 0}.get(count,"anything truthy") and f(N)。这要求您了解dict值的真实性,并且它们都需要具有相同的真实性。如果所有值都为true,则反转布尔运算符,例如{0: 7}.get(weekday, False) or f(weekday)

count= [0,N+1][count==N]给定解的集合在python 2.7中不起作用

如果测试在[value_false, value_true][]中计算结果为false,而不是相反(例如value_true if else value_false),那么我正在试图理解将第一个值赋值后的概念。这种看似不直观的语法背后有什么逻辑吗?

因为False计算为0,而True计算为1。虽然有效,但要避免。通常这是一个坏的方法。

像这样的语句失败有什么特殊的原因吗?x+=1 if else y+=1

因为if语法只允许放置表达式;但是x+=1是一种说法。

if else

你的代码片段会变成,

count = 0 if count == N else N + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值