用于'... if ... else ...'表达式的Python习语

ruk*_*eba 6 python idioms

如何将表达式写得更短:

return '%.0f' % float_var if float_var else float_var
Run Code Online (Sandbox Code Playgroud)

要么

if float_var:
    return formatted_string
else:
    return None
Run Code Online (Sandbox Code Playgroud)

谢谢!

Joh*_*lla 28

这个表达式<value> if <condition> else <other_value>已经非常惯用了 - 当然比其他例子更为恰当,并且只要<value>简单就可能是首选.这是Python的三元运算符,所以如果你正在寻找类似的东西<condition> ? <value> : <other_value>,那就不存在了.

如果计算<value><other_value>采取一些步骤,请使用更长的if: ... else: ...替代方案.


Dav*_*rby 5

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

return ('%.0f' % float_var) if float_var else float_var
Run Code Online (Sandbox Code Playgroud)

当我第一次看到它时,我读为

return '%.0f' % (float_var if float_var else float_var)
Run Code Online (Sandbox Code Playgroud)

这将是愚蠢的。我必须尝试一下以确保其工作方式。

顺便说一句,您的第一个示例不等同于您的第二个示例

if float_var:
    return formatted_string
else:
    return None
Run Code Online (Sandbox Code Playgroud)

这将始终返回格式化的字符串或无。您的第一个示例如果传递的任何结果都为False(False,0、0.0,“”,[]等),则将返回该值不变,因此您的返回类型可以是字符串,布尔值,列表,整型,浮点型等。可能不是您想要的,特别是如果0.0是float_var的合法值。我会将您的代码更改为:

return ('%.0f' % float_var) if isinstance(float_var, float) else None
Run Code Online (Sandbox Code Playgroud)

或者:

try:
    return "%.0f" % float_var
except TypeError:
    return None
Run Code Online (Sandbox Code Playgroud)

通过将其他整数(和long型)转换为浮点数,它将适用于其他整数(和long型)。