Python的成语'。。。如果。。。“其他…”表达式

2024-04-30 02:48:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如何缩短表达式:

return '%.0f' % float_var if float_var else float_var

或者

if float_var:
    return formatted_string
else:
    return None

谢谢!


Tags: nonestringreturnif表达式varfloatelse
3条回答

表达式<value> if <condition> else <other_value>已经相当习惯了——当然比其他示例更习惯了,而且只要<value>很简单,就可能是首选表达式。这是Python的三元运算符,因此如果您要查找类似<condition> ? <value> : <other_value>的内容,则该运算符不存在。

如果计算<value><other_value>需要几个步骤,请使用较长的if: ... else: ...替代方法。

  • 不清楚你到底想做什么。

    1. 最直接的解释是这样的

      >>> float_var = 4.5
      >>> '%.0f' % float_var if float_var else float_var
      '5' # This is a string
      >>> float_var = 0.0
      >>> '%.0f' % float_var if float_var else float_var
      0.0 # This is a float
      

      我几乎可以肯定你不想要。

    2. 我想你想用“if float_var”检查一下None?如果是的话,你总是拼写成“if foo is not None”,而不是“if foo”,前者更清晰,更不容易出错。

      如果这是你想要的,我建议你修改你的模型。通过重复返回None来传播错误是一件坏事:它很难看,而且容易出错,而且不符合习惯。使用异常代替。

  • 越短越好。你的代码片段并不长,也不难处理。事实上,如果您使用它们来避免潜在的bug,那么您将希望使它们的时间更长一些。

    • 有人可能建议为此滥用or的短路行为。但是,这使得代码更难阅读,并且不允许您指定None和其他错误值之间的值,这通常会导致错误。

我将使用括号使表达式更具可读性:

return ('%.0f' % float_var) if float_var else float_var

当我第一次看到它的时候

return '%.0f' % (float_var if float_var else float_var)

那就太傻了。我得试一下,以确定哪种方法有效。

顺便说一句,你的第一个例子并不等同于你的第二个例子

if float_var:
    return formatted_string
else:
    return None

这将始终返回格式化字符串或无格式字符串。如果传入的任何计算结果为False(False、0、0.0、“”、[]等)的内容都将返回该值,因此返回类型可以是string、boolean、list、int、float等。这可能不是您想要的,特别是如果0.0是float_var的合法值,我会将您的代码更改为:

return ('%.0f' % float_var) if isinstance(float_var, float) else None

或者:

try:
    return "%.0f" % float_var
except TypeError:
    return None

它将通过将其他整数(和长整数)转换为浮点来工作。

相关问题 更多 >