使用%.*g的Python数字打印格式

使用%.*g的Python数字打印格式,python,string-formatting,Python,String Formatting,我在网上找到了这个python示例,我想确切了解数字格式的工作原理: print "%.*g\t%.*g" % (xprecision, a, yprecision, b) 我可以通过实验看到,它打印a(精度为xprecision)、a选项卡,然后是b(精度为yprecision)。举个简单的例子,如果我 print "%.*g\t%.*g" % (5, 2.23523523, 3, 12.353262) 然后我得到 2.2352 12.4 我了解%g通常是如何工作的。我也了解%的一般工

我在网上找到了这个python示例,我想确切了解数字格式的工作原理:

print "%.*g\t%.*g" % (xprecision, a, yprecision, b)
我可以通过实验看到,它打印a(精度为xprecision)、a选项卡,然后是b(精度为yprecision)。举个简单的例子,如果我

print "%.*g\t%.*g" % (5, 2.23523523, 3, 12.353262)
然后我得到

2.2352  12.4
我了解
%g
通常是如何工作的。我也了解
%
的一般工作原理。在这个例子中,让我困惑的是构造
%.*g
*
在这里是如何工作的?我可以看出,它以某种方式获取所需的精度值,并将其替换到打印表达式中,但为什么会发生这种情况?为什么在(xprecision,a…)中格式化的数字之前会出现精度数字

有人能把这个分解一下并给我解释一下吗?

*
是一个尺寸占位符。它告诉格式化操作从右侧元组中获取下一个值,并将其用作精度

在您的示例中,第一个插槽的“下一个”值为
5
,因此您可以将其读取为
%.5g
,用于格式化
2.23523523
。第二个插槽使用
3
作为宽度,因此变为
%.3g
以格式化
12.353262

见:

转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按此顺序出现:

(……)

  • 最小字段宽度(可选)。如果指定为
    “*”
    (星号),则实际宽度从值中元组的下一个元素读取,要转换的对象位于最小字段宽度和可选精度之后

  • 精度(可选),表示为“
    ”。
    (点),后跟精度。如果指定为
    “*”
    (星号),则从值中元组的下一个元素读取实际宽度,要转换的值位于精度之后


  • 因此,最小宽度和精度都可以通过
    *
    变为变量,并且文档明确说明要转换的值位于宽度和精度之后。

    在格式规范中,每个项目都有字段宽度。大多数情况下,它是一个常数:

     The value is %.16g
    
    但字段宽度/精度也可以是变量。
    *
    表示用格式列表中的下一个整数替换splat

    如果要格式化的值之前有一个
    16
    ,则将执行相同的操作:

     "The value is %.*g" % (16, 14.372492384472)
    

    太好了,谢谢!这是否意味着无法同时指定最小字段宽度和精度?@EPH不,只需使用两个
    *
    字符:
    %*.*g
    哇,太酷了!指定字段宽度和精度将帮助我保持打印文件中的列整齐排列。谢谢
     "The value is %.*g" % (16, 14.372492384472)