单行if语句-Python

单行if语句-Python,python,Python,我有 我想重构成一行。如下所示: if board[a][b] == 0: board[a][b] = chr(current_char) 看来我能做的最接近的就是 board[a][b] = chr(current_char) if board[a][b] == 0 但else条款似乎是多余的。有没有一种风格上更好的方法来实现这一点?您的两行版本很容易做到最清晰。坚持下去 board[a][b] = chr(current_char) if board[a][b] == 0 el

我有

我想重构成一行。如下所示:

if board[a][b] == 0:
     board[a][b] = chr(current_char)
看来我能做的最接近的就是

board[a][b] = chr(current_char) if board[a][b] == 0

但else条款似乎是多余的。有没有一种风格上更好的方法来实现这一点?

您的两行版本很容易做到最清晰。坚持下去

board[a][b] = chr(current_char) if board[a][b] == 0 else board[a][b]

刚才发生了什么事?如果是你的经理写的,你想找一个新经理。如果你这样做了,也许你的经理会寻找一名新员工,因为该计划在你度假时崩溃了。

你的两行版本很容易就最清晰了。坚持下去

board[a][b] = chr(current_char) if board[a][b] == 0 else board[a][b]

刚才发生了什么事?如果是你的经理写的,你想找一个新经理。如果你这样做了,也许你的经理会寻找一名新员工,因为该计划在你度假时崩溃了。

做这类事情的一种更为通俗的方式是:

>>> board[a][b] = board[a][b] or chr(current_char)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

做这类事情的一种更具Python风格的方式是:

>>> board[a][b] = board[a][b] or chr(current_char)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

在Python拥有三元运算符之前,老派Python有一个做三元运算的技巧。事实上,这个技巧在许多编程语言中都有效。我只想告诉你,如果你答应不使用它

答应我

[val_if_false,val_if_true][boolcondition]

好的,现在Python有一个三元结构,它看起来像

board[a][b] = board[a][b] or chr(current_char)
但即使这样也有点草率。如果你真的想要一行,做一个函数

val_if_true if condition else val_if_false
您的具体案例更专业一些,因为您希望else是原始值。你可以

def val():
    if condition:
        return val_if_true
    else:
        return val_if_false

但是,if语句的可读性更高,目的也更清楚。

在Python使用三元运算符之前,老派Python有一个做三元运算的技巧。事实上,这个技巧在许多编程语言中都有效。我只想告诉你,如果你答应不使用它

答应我

[val_if_false,val_if_true][boolcondition]

好的,现在Python有一个三元结构,它看起来像

board[a][b] = board[a][b] or chr(current_char)
但即使这样也有点草率。如果你真的想要一行,做一个函数

val_if_true if condition else val_if_false
您的具体案例更专业一些,因为您希望else是原始值。你可以

def val():
    if condition:
        return val_if_true
    else:
        return val_if_false
但同样,if语句更具可读性,其意图更清晰。

您可以在Python中执行此操作:

如果您只想将其放在一行中。

您可以在Python中执行此操作:


如果你只想把它放在一行中。

为什么要这样做?你的电脑上的新线少了吗?@Barmar good one lol。你去过阿灵顿的Comellas吗?是的,没什么印象。我是单身,这对那些能享受晚餐大餐的家庭来说更合适。如果出于某种奇怪的原因,你想把你的If语句写在一行,为什么不呢?如果在冒号后没有按回车键,代码仍然有效。@DSM我知道它是有效的,但是这种风格好吗?为什么需要这样做?你的电脑上的新线少了吗?@Barmar good one lol。你去过阿灵顿的Comellas吗?是的,没什么印象。我是单身,这对那些能享受晚餐大餐的家庭来说更合适。如果出于某种奇怪的原因,你想把你的If语句写在一行,为什么不呢?如果在冒号后没有按回车键,则代码仍然有效。@DSM我知道它是有效的,但这是一种好的样式吗?+1它是正确的,但我不同意它是Pythonic。明显性是蟒蛇性的重要组成部分。对于一般的维护程序员来说,当or运算符的操作数不是布尔值时,or运算符的行为应该是这样的吗?正如前面提到的,它绝对不是Pythonic。看看我的例子。在两行版本中,什么地方出了问题会更清楚。这个例子更像是C语言,尽管我怀疑C程序员是否也会这样建议。我们可以同意不同意,但很多被认为是Pythonic的东西是利用该语言的特性来获得通用模式的简洁表达式。例如,Python的真实性经常被利用,包括我的解决方案,以减少额外的噪音,例如如果lensome_list!=0... vs如果某个_列表。。。。在类型化时显式使用变量更像是C语言。利用duck类型的模式在Pythonic程序中经常可以看到。从维护的角度来看,哪一个更好是另一个争论。+1这是正确的,但我不同意这是Pythonic。明显性是蟒蛇性的重要组成部分。对于一般的维护程序员来说,当or运算符的操作数不是布尔值时,or运算符的行为应该是这样的吗?正如前面提到的,它绝对不是Pythonic。看看我的例子。在两行版本中,什么地方出了问题会更清楚。这个例子更像是C语言,尽管我怀疑C程序员是否也会这样建议。我们可以同意不同意,但很多被认为是Pythonic的东西是利用该语言的特性来获得通用模式的简洁表达式。例如,Python的真实性经常被利用,包括我的解决方案以减少额外的噪音
例如,如果lensome_列表!=0... vs如果某个_列表。。。。在类型化时显式使用变量更像是C语言。利用duck类型的模式在Pythonic程序中经常可以看到。从维护的角度来看,哪一个更好是另一个争论。我认为这里发生的事情在两行版本中仍然会发生。这取决于哪一行会导致错误。你可能是对的。但你确定吗?这就是重点。错误在哪里?a、 b,board,chr,current_char?我确定,因为我知道chr需要一个整数。即使我没有,我也会惊讶地发现board[a][b]的问题是一个打字错误而不是键盘错误。你能制造一个expression board[a][b]引发打字错误的案例吗?我不能,但它可能引发索引器。关键是,将错误定位到更小的域是一种改进。我认为这里发生的事情在两行版本中仍然会发生。这取决于哪一行会导致错误。你可能是对的。但你确定吗?这就是重点。错误在哪里?a、 b,board,chr,current_char?我确定,因为我知道chr需要一个整数。即使我没有,我也会惊讶地发现board[a][b]的问题是一个打字错误而不是键盘错误。你能制造一个expression board[a][b]引发打字错误的案例吗?我不能,但它可能引发索引器。关键是将错误定位到更小的域是一种改进。