为什么 f"{11: 2d}" 不填充到 2 个字符?
Why does f"{11: 2d}" not pad to 2 characters?
我正在使用 Ipython 7.0.1
和 Python 3.6.9
我想用格式字符串迷你语言右对齐数字。我使用 1
和 11
作为 1 位和 2 位数字的示例,我想将它们填充到总共 2 个字符。
对于零填充,一切都按预期工作,>
是可选的,因为它是默认值:
In [0]: print(f"{1:02d}\n{11:02d}\n{1:0>2d}\n{11:0>2d}")
01
11
01
11
但是当我想用 spaces 填充时,只要我离开 space 它也可以工作,因此它默认为 space:
In [1]: print(f"{1:2d}\n{11:2d}\n{1:>2d}\n{11:>2d}")
1
11
1
11
但是如果我明确地输入 space,我对结果感到惊讶:
In [2]: print(f"{1: 2d}\n{11: 2d}\n{1: >2d}\n{11: >2d}")
1
11
1
11
这是为什么?
全部在文档中...
format_spec ::= [[fill]align][sign]...
If a valid align value is specified, it can be preceded by a fill character
由于 fill
和 sign
都可以是 space
,所以它会产生歧义,因此 space
因为 fill
必须后跟 align
.
以下是 Python 对您最后一行的解释:
f"{1: 2d}" #interpreted as sign therefore (accidentally) same effect -> " 1"
f"{11: 2d}" #interpreted as sign therefore a leading space is inserted -> " 11"
f"{1: >2d}" #align is present, pad with ' ' -> " 1"
f"{11: >2d}" #align is present, pad with ' ' but number long enough -> "11"
我正在使用 Ipython 7.0.1
和 Python 3.6.9
我想用格式字符串迷你语言右对齐数字。我使用 1
和 11
作为 1 位和 2 位数字的示例,我想将它们填充到总共 2 个字符。
对于零填充,一切都按预期工作,>
是可选的,因为它是默认值:
In [0]: print(f"{1:02d}\n{11:02d}\n{1:0>2d}\n{11:0>2d}")
01
11
01
11
但是当我想用 spaces 填充时,只要我离开 space 它也可以工作,因此它默认为 space:
In [1]: print(f"{1:2d}\n{11:2d}\n{1:>2d}\n{11:>2d}")
1
11
1
11
但是如果我明确地输入 space,我对结果感到惊讶:
In [2]: print(f"{1: 2d}\n{11: 2d}\n{1: >2d}\n{11: >2d}")
1
11
1
11
这是为什么?
全部在文档中...
format_spec ::= [[fill]align][sign]...
If a valid align value is specified, it can be preceded by a fill character
由于 fill
和 sign
都可以是 space
,所以它会产生歧义,因此 space
因为 fill
必须后跟 align
.
以下是 Python 对您最后一行的解释:
f"{1: 2d}" #interpreted as sign therefore (accidentally) same effect -> " 1"
f"{11: 2d}" #interpreted as sign therefore a leading space is inserted -> " 11"
f"{1: >2d}" #align is present, pad with ' ' -> " 1"
f"{11: >2d}" #align is present, pad with ' ' but number long enough -> "11"