6

有没有办法使用变量来决定文字字符串插值中的小数点数?

例如,如果我有类似的东西

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')

但是我想不出一种简单的方法来用3变量替换字符串插值中的decimal

4

2 回答 2

10

格式说明符可以嵌套。在 Python 3.5 中,这看起来像这样:

"{:.{}f}".format(some_float, decimals)

但事实证明这同样适用于 Python 3.6f"..."格式字符串。

>>> 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'
于 2017-11-28T10:02:00.153 回答
2

是的,您可以使用双花括号转义字符串模板文字:

decimals = 5
template = f'{{some_float:{decimals}.f}}'
// '{some_float:5.f}'
template.format(some_float=some_float)

我认为您不能使用格式化的字符串文字进行第二次替换,但我认为无论如何这是一个不错的解决方案。

我认为您在问题的第一个代码示例中犯了一个错误,点在您的格式化程序中的位置错误。(3.f而不是.3f

于 2017-11-28T09:57:17.440 回答