如何将表达式写得更短:
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: ...替代方案.
我将使用方括号使表达式更具可读性:
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型)。