bpo-41045: Document debug feature of f-strings ('=') (GH-21509)

Co-Authored-By: Rishi <rishi93dev@gmail.com>

Automerge-Triggered-By: @gvanrossum
This commit is contained in:
amaajemyfren 2020-07-28 01:31:02 +03:00 committed by GitHub
parent b3fbff7289
commit 13efaec2e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 5 deletions

View File

@ -637,9 +637,11 @@ and formatted string literals may be concatenated with plain string literals.
single: string; formatted literal single: string; formatted literal
single: string; interpolated literal single: string; interpolated literal
single: f-string single: f-string
single: fstring
single: {} (curly brackets); in formatted string literal single: {} (curly brackets); in formatted string literal
single: ! (exclamation); in formatted string literal single: ! (exclamation); in formatted string literal
single: : (colon); in formatted string literal single: : (colon); in formatted string literal
single: = (equals); for help in debugging using string literals
.. _f-strings: .. _f-strings:
Formatted string literals Formatted string literals
@ -659,7 +661,7 @@ for the contents of the string is:
.. productionlist:: .. productionlist::
f_string: (`literal_char` | "{{" | "}}" | `replacement_field`)* f_string: (`literal_char` | "{{" | "}}" | `replacement_field`)*
replacement_field: "{" `f_expression` ["!" `conversion`] [":" `format_spec`] "}" replacement_field: "{" `f_expression` ["="] ["!" `conversion`] [":" `format_spec`] "}"
f_expression: (`conditional_expression` | "*" `or_expr`) f_expression: (`conditional_expression` | "*" `or_expr`)
: ("," `conditional_expression` | "," "*" `or_expr`)* [","] : ("," `conditional_expression` | "," "*" `or_expr`)* [","]
: | `yield_expression` : | `yield_expression`
@ -671,10 +673,11 @@ The parts of the string outside curly braces are treated literally,
except that any doubled curly braces ``'{{'`` or ``'}}'`` are replaced except that any doubled curly braces ``'{{'`` or ``'}}'`` are replaced
with the corresponding single curly brace. A single opening curly with the corresponding single curly brace. A single opening curly
bracket ``'{'`` marks a replacement field, which starts with a bracket ``'{'`` marks a replacement field, which starts with a
Python expression. After the expression, there may be a conversion field, Python expression. To display both the expression text and its value after
introduced by an exclamation point ``'!'``. A format specifier may also evaluation, (useful in debugging), an equal sign ``'='`` may be added after the
be appended, introduced by a colon ``':'``. A replacement field ends expression. A conversion field, introduced by an exclamation point ``'!'`` may
with a closing curly bracket ``'}'``. follow. A format specifier may also be appended, introduced by a colon ``':'``.
A replacement field ends with a closing curly bracket ``'}'``.
Expressions in formatted string literals are treated like regular Expressions in formatted string literals are treated like regular
Python expressions surrounded by parentheses, with a few exceptions. Python expressions surrounded by parentheses, with a few exceptions.
@ -690,6 +693,17 @@ left to right.
containing an :keyword:`async for` clause were illegal in the expressions containing an :keyword:`async for` clause were illegal in the expressions
in formatted string literals due to a problem with the implementation. in formatted string literals due to a problem with the implementation.
When the equal sign ``'='`` is provided, the output will have the expression
text, the ``'='`` and the evaluated value. Spaces after the opening brace
``'{'``, within the expression and after the ``'='`` are all retained in the
output. By default, the ``'='`` causes the :func:`repr` of the expression to be
provided, unless there is a format specified. When a format is specified it
defaults to the :func:`str` of the expression unless a conversion ``'!r'`` is
declared.
.. versionadded:: 3.8
The equal sign ``'='`` was added in Python 3.8.
If a conversion is specified, the result of evaluating the expression If a conversion is specified, the result of evaluating the expression
is converted before formatting. Conversion ``'!s'`` calls :func:`str` on is converted before formatting. Conversion ``'!s'`` calls :func:`str` on
the result, ``'!r'`` calls :func:`repr`, and ``'!a'`` calls :func:`ascii`. the result, ``'!r'`` calls :func:`repr`, and ``'!a'`` calls :func:`ascii`.
@ -724,9 +738,22 @@ Some examples of formatted string literals::
>>> today = datetime(year=2017, month=1, day=27) >>> today = datetime(year=2017, month=1, day=27)
>>> f"{today:%B %d, %Y}" # using date format specifier >>> f"{today:%B %d, %Y}" # using date format specifier
'January 27, 2017' 'January 27, 2017'
>>> f"{today=:%B %d, %Y}" # using date format specifier and debugging
'today=January 27, 2017'
>>> number = 1024 >>> number = 1024
>>> f"{number:#0x}" # using integer format specifier >>> f"{number:#0x}" # using integer format specifier
'0x400' '0x400'
>>> foo = "bar"
>>> f"{ foo = }" # preserves whitespace
" foo = 'bar'"
>>> line = "The mill's closed"
>>> f"{line = }"
'line = "The mill\'s closed"'
>>> f"{line = :20}"
"line = The mill's closed "
>>> f"{line = !r:20}"
'line = "The mill\'s closed" '
A consequence of sharing the same syntax as regular string literals is A consequence of sharing the same syntax as regular string literals is
that characters in the replacement fields must not conflict with the that characters in the replacement fields must not conflict with the

View File

@ -0,0 +1 @@
Add documentation for debug feature of f-strings.