Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Doc/library/string.rst
Original file line number Diff line number Diff line change
Expand Up @@ -347,8 +347,8 @@ The meaning of the various alignment options is as follows:
| ``'='`` | Forces the padding to be placed after the sign (if any) |
| | but before the digits. This is used for printing fields |
| | in the form '+000000120'. This alignment option is only |
| | valid for numeric types. It becomes the default when '0'|
| | immediately precedes the field width. |
| | valid for numeric types. It becomes the default for |
| | numbers when '0' immediately precedes the field width. |
+---------+----------------------------------------------------------+
| ``'^'`` | Forces the field to be centered within the available |
| | space. |
Expand Down Expand Up @@ -424,6 +424,10 @@ When no explicit alignment is given, preceding the *width* field by a zero
sign-aware zero-padding for numeric types. This is equivalent to a *fill*
character of ``'0'`` with an *alignment* type of ``'='``.

.. versionchanged:: 3.10
Preceding the *width* field by ``'0'`` no longer affects the default
alignment for strings.

The *precision* is a decimal number indicating how many digits should be
displayed after the decimal point for a floating point value formatted with
``'f'`` and ``'F'``, or before and after the decimal point for a floating point
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_unicode.py
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,12 @@ def __repr__(self):
self.assertEqual('{0:^8s}'.format('result'), ' result ')
self.assertEqual('{0:^9s}'.format('result'), ' result ')
self.assertEqual('{0:^10s}'.format('result'), ' result ')
self.assertEqual('{0:8s}'.format('result'), 'result ')
self.assertEqual('{0:0s}'.format('result'), 'result')
self.assertEqual('{0:08s}'.format('result'), 'result00')
self.assertEqual('{0:<08s}'.format('result'), 'result00')
self.assertEqual('{0:>08s}'.format('result'), '00result')
self.assertEqual('{0:^08s}'.format('result'), '0result0')
self.assertEqual('{0:10000}'.format('a'), 'a' + ' ' * 9999)
self.assertEqual('{0:10000}'.format(''), ' ' * 10000)
self.assertEqual('{0:10000000}'.format(''), ' ' * 10000000)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
In string formatting, preceding the *width* field by ``'0'`` no longer
affects the default alignment for strings.
2 changes: 1 addition & 1 deletion Python/formatter_unicode.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ parse_internal_render_format_spec(PyObject *format_spec,
/* The special case for 0-padding (backwards compat) */
if (!fill_char_specified && end-pos >= 1 && READ_spec(pos) == '0') {
format->fill_char = '0';
if (!align_specified) {
if (!align_specified && default_align == '>') {
format->align = '=';
}
++pos;
Expand Down