单行if语句 - Python

时间:2015-03-03 02:39:58

标签: python

我有

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

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

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

似乎最接近我的是

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

但是else子句似乎是多余的。是否有更好的方法来实现这一目标?

4 个答案:

答案 0 :(得分:6)

Oldschool Python在Python拥有三元运算符之前有一个做三元组的技巧。实际上,这个技巧将适用于许多编程语言。我只会告诉你是否保证不使用它。

无极?

  

[val_if_false, val_if_true][bool(condition)]

好的,现在Python有一个三元组,看起来像

val_if_true if condition else val_if_false

但即使这样也有点草率。如果你真的想要一个衬垫,那就做一个功能。

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

您的特定案例更加专业化,因为您希望else成为原始值。你可以做到

box[a][b] = box[a][b] or chr(current_char)

但同样,if语句对于意图更具可读性和清晰度。

答案 1 :(得分:2)

更多" Pythonic"做这种事情的方法是:

board[a][b] = board[a][b] or chr(current_char)

答案 2 :(得分:2)

您可以在 Python

中执行此操作
if board[a][b] == 0: board[a][b] = chr(current_char)

如果您打算将其放在一行中。

答案 3 :(得分:-1)

你的两行版本很容易。坚持下去。

>>> 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

这里发生了什么?如果你的经理写了,你想找一个新经理。如果你这样做,也许你的经理会找一个新员工,因为你在度假时程序崩溃了。