选择字符串插值中的小数点位数
Choose the number of decimal points in string interpolation
有没有办法使用变量来决定文字字符串插值中的小数点位数?
例如,如果我有类似的东西
f'{some_float:.3f}'
有没有办法用变量替换 3
?
最终目标是向条形图添加数据标签:
def autolabel_bar(rects, ax, decimals=3):
"""
Attach a text label above each bar displaying its height
"""
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2.,
height + 0.035,
f'{round(height,decimals):.3f}',
ha='center',
va='center')
但是我想不出一个简单的方法来用变量decimal
替换字符串插值中的3
。
是的,您可以使用双花括号转义字符串模板文字:
decimals = 5
template = f'{{some_float:{decimals}.f}}'
// '{some_float:5.f}'
template.format(some_float=some_float)
我认为您不能使用 formatted string literals 进行第二次替换,但我认为这是一个很好的解决方案。
我认为你在问题的第一个代码示例中犯了一个错误,点在你的格式化程序中的错误位置。 (3.f
而不是 .3f
)
格式说明符可以嵌套。在 Python 3.5 中,这看起来像像这样:
"{:.{}f}".format(some_float, decimals)
但事实证明,同样适用于 Python 3.6 f"..."
格式字符串。
>>> some_float = math.pi
>>> decimals = 3
>>> f"{some_float:.{decimals}f}"
'3.142'
也可以与 round
结合使用:
>>> decimals = 5
>>> f"{round(math.pi, decimals):.{decimals}f}"
'3.14159'
有没有办法使用变量来决定文字字符串插值中的小数点位数?
例如,如果我有类似的东西
f'{some_float:.3f}'
有没有办法用变量替换 3
?
最终目标是向条形图添加数据标签:
def autolabel_bar(rects, ax, decimals=3):
"""
Attach a text label above each bar displaying its height
"""
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2.,
height + 0.035,
f'{round(height,decimals):.3f}',
ha='center',
va='center')
但是我想不出一个简单的方法来用变量decimal
替换字符串插值中的3
。
是的,您可以使用双花括号转义字符串模板文字:
decimals = 5
template = f'{{some_float:{decimals}.f}}'
// '{some_float:5.f}'
template.format(some_float=some_float)
我认为您不能使用 formatted string literals 进行第二次替换,但我认为这是一个很好的解决方案。
我认为你在问题的第一个代码示例中犯了一个错误,点在你的格式化程序中的错误位置。 (3.f
而不是 .3f
)
格式说明符可以嵌套。在 Python 3.5 中,这看起来像像这样:
"{:.{}f}".format(some_float, decimals)
但事实证明,同样适用于 Python 3.6 f"..."
格式字符串。
>>> some_float = math.pi
>>> decimals = 3
>>> f"{some_float:.{decimals}f}"
'3.142'
也可以与 round
结合使用:
>>> decimals = 5
>>> f"{round(math.pi, decimals):.{decimals}f}"
'3.14159'