我有
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子句似乎是多余的。是否有更好的方法来实现这一目标?
答案 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
这里发生了什么?如果你的经理写了,你想找一个新经理。如果你这样做,也许你的经理会找一个新员工,因为你在度假时程序崩溃了。