【问题标题】:Pythonic way - Ternary vs orPythonic 方式 - 三元 vs 或
【发布时间】:2026-01-21 11:40:01
【问题描述】:

我真的只是想知道,当涉及到这种情况时,pythonic 的处理方式是什么?使用if else 三元组或or

true_list = []
for x, y in a_list: # x, y could be any truthy or falsy value
  true_list.append(x or y)
  true_list.append(x if x else y)

编辑:我更新了这个问题以忽略语义,我主要想知道哪个表达式更 Pythonic。

【问题讨论】:

  • 如果你写string += x if x is not None else y你不需要评论。与您所拥有的相比,它确实以不同的方式处理空字符串。
  • 你不能忽略语义。不符合您预期的代码是不是 Pythonic。
  • x if x or y 甚至在语法上都不正确;我猜你的意思是x if x else y

标签: python logical-operators conditional-operator


【解决方案1】:

这是引入条件运算符的情况;使用它。

string += x if x else y  # Or ... if x is not None ... if the distinction is necessary

一般来说,当您只关心表达式的真实性而不关心其真实性正在考虑的“实际”值时,请使用or

之所以引入条件表达式是因为很多人都想写这样的代码

<condition> and x or y

但这有点错误:如果条件为真,表达式的意图是等于x,但如果两者条件和x 都等于x真的。

【讨论】:

  • 这是我会做的,更具可读性,通常在 python 中很常见。
  • 我更新了问题以更好地反映我的意思!
【解决方案2】:

如果xy 都可以是None,您可以做得更详细:

>>> string = ""
>>> x, y = (None, None)
>>> string += x if x else y if y else '' # Fallback to empty string
>>> string
''

【讨论】: