Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit fee8089

Browse filesBrowse files
authored
gh-85583: Add an overview of formatted string literals (f-strings) to str (#132689)
1 parent a04390b commit fee8089
Copy full SHA for fee8089

File tree

Expand file treeCollapse file tree

2 files changed

+143
-3
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+143
-3
lines changed

‎Doc/library/dis.rst

Copy file name to clipboardExpand all lines: Doc/library/dis.rst
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,7 +1667,7 @@ iterations of the loop.
16671667
* ``oparg == 2``: call :func:`repr` on *value*
16681668
* ``oparg == 3``: call :func:`ascii` on *value*
16691669

1670-
Used for implementing formatted literal strings (f-strings).
1670+
Used for implementing formatted string literals (f-strings).
16711671

16721672
.. versionadded:: 3.13
16731673

@@ -1680,7 +1680,7 @@ iterations of the loop.
16801680
result = value.__format__("")
16811681
STACK.append(result)
16821682

1683-
Used for implementing formatted literal strings (f-strings).
1683+
Used for implementing formatted string literals (f-strings).
16841684

16851685
.. versionadded:: 3.13
16861686

@@ -1693,7 +1693,7 @@ iterations of the loop.
16931693
result = value.__format__(spec)
16941694
STACK.append(result)
16951695

1696-
Used for implementing formatted literal strings (f-strings).
1696+
Used for implementing formatted string literals (f-strings).
16971697

16981698
.. versionadded:: 3.13
16991699

‎Doc/library/stdtypes.rst

Copy file name to clipboardExpand all lines: Doc/library/stdtypes.rst
+140Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,6 +2456,146 @@ expression support in the :mod:`re` module).
24562456
'-0042'
24572457

24582458

2459+
.. index::
2460+
single: ! formatted string literal
2461+
single: formatted string literals
2462+
single: ! f-string
2463+
single: f-strings
2464+
single: fstring
2465+
single: interpolated string literal
2466+
single: string; formatted literal
2467+
single: string; interpolated literal
2468+
single: {} (curly brackets); in formatted string literal
2469+
single: ! (exclamation mark); in formatted string literal
2470+
single: : (colon); in formatted string literal
2471+
single: = (equals); for help in debugging using string literals
2472+
2473+
Formatted String Literals (f-strings)
2474+
-------------------------------------
2475+
2476+
.. versionadded:: 3.6
2477+
.. versionchanged:: 3.7
2478+
The :keyword:`await` and :keyword:`async for` can be used in expressions
2479+
within f-strings.
2480+
.. versionchanged:: 3.8
2481+
Added the debugging operator (``=``)
2482+
.. versionchanged:: 3.12
2483+
Many restrictions on expressions within f-strings have been removed.
2484+
Notably, nested strings, comments, and backslashes are now permitted.
2485+
2486+
An :dfn:`f-string` (formally a :dfn:`formatted string literal`) is
2487+
a string literal that is prefixed with ``f`` or ``F``.
2488+
This type of string literal allows embedding arbitrary Python expressions
2489+
within *replacement fields*, which are delimited by curly brackets (``{}``).
2490+
These expressions are evaluated at runtime, similarly to :meth:`str.format`,
2491+
and are converted into regular :class:`str` objects.
2492+
For example:
2493+
2494+
.. doctest::
2495+
2496+
>>> who = 'nobody'
2497+
>>> nationality = 'Spanish'
2498+
>>> f'{who.title()} expects the {nationality} Inquisition!'
2499+
'Nobody expects the Spanish Inquisition!'
2500+
2501+
It is also possible to use a multi line f-string:
2502+
2503+
.. doctest::
2504+
2505+
>>> f'''This is a string
2506+
... on two lines'''
2507+
'This is a string\non two lines'
2508+
2509+
A single opening curly bracket, ``'{'``, marks a *replacement field* that
2510+
can contain any Python expression:
2511+
2512+
.. doctest::
2513+
2514+
>>> nationality = 'Spanish'
2515+
>>> f'The {nationality} Inquisition!'
2516+
'The Spanish Inquisition!'
2517+
2518+
To include a literal ``{`` or ``}``, use a double bracket:
2519+
2520+
.. doctest::
2521+
2522+
>>> x = 42
2523+
>>> f'{{x}} is {x}'
2524+
'{x} is 42'
2525+
2526+
Functions can also be used, and :ref:`format specifiers <formatstrings>`:
2527+
2528+
.. doctest::
2529+
2530+
>>> from math import sqrt
2531+
>>> f'√2 \N{ALMOST EQUAL TO} {sqrt(2):.5f}'
2532+
'√2 ≈ 1.41421'
2533+
2534+
Any non-string expression is converted using :func:`str`, by default:
2535+
2536+
.. doctest::
2537+
2538+
>>> from fractions import Fraction
2539+
>>> f'{Fraction(1, 3)}'
2540+
'1/3'
2541+
2542+
To use an explicit conversion, use the ``!`` (exclamation mark) operator,
2543+
followed by any of the valid formats, which are:
2544+
2545+
========== ==============
2546+
Conversion Meaning
2547+
========== ==============
2548+
``!a`` :func:`ascii`
2549+
``!r`` :func:`repr`
2550+
``!s`` :func:`str`
2551+
========== ==============
2552+
2553+
For example:
2554+
2555+
.. doctest::
2556+
2557+
>>> from fractions import Fraction
2558+
>>> f'{Fraction(1, 3)!s}'
2559+
'1/3'
2560+
>>> f'{Fraction(1, 3)!r}'
2561+
'Fraction(1, 3)'
2562+
>>> question = '¿Dónde está el Presidente?'
2563+
>>> print(f'{question!a}')
2564+
'\xbfD\xf3nde est\xe1 el Presidente?'
2565+
2566+
While debugging it may be helpful to see both the expression and its value,
2567+
by using the equals sign (``=``) after the expression.
2568+
This preserves spaces within the brackets, and can be used with a converter.
2569+
By default, the debugging operator uses the :func:`repr` (``!r``) conversion.
2570+
For example:
2571+
2572+
.. doctest::
2573+
2574+
>>> from fractions import Fraction
2575+
>>> calculation = Fraction(1, 3)
2576+
>>> f'{calculation=}'
2577+
'calculation=Fraction(1, 3)'
2578+
>>> f'{calculation = }'
2579+
'calculation = Fraction(1, 3)'
2580+
>>> f'{calculation = !s}'
2581+
'calculation = 1/3'
2582+
2583+
Once the output has been evaluated, it can be formatted using a
2584+
:ref:`format specifier <formatstrings>` following a colon (``':'``).
2585+
After the expression has been evaluated, and possibly converted to a string,
2586+
the :meth:`!__format__` method of the result is called with the format specifier,
2587+
or the empty string if no format specifier is given.
2588+
The formatted result is then used as the final value for the replacement field.
2589+
For example:
2590+
2591+
.. doctest::
2592+
2593+
>>> from fractions import Fraction
2594+
>>> f'{Fraction(1, 7):.6f}'
2595+
'0.142857'
2596+
>>> f'{Fraction(1, 7):_^+10}'
2597+
'___+1/7___'
2598+
24592599

24602600
.. _old-string-formatting:
24612601

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.