mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	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:
		
							parent
							
								
									b3fbff7289
								
							
						
					
					
						commit
						13efaec2e0
					
				
					 2 changed files with 33 additions and 5 deletions
				
			
		|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | Add documentation for debug feature of f-strings. | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 amaajemyfren
						amaajemyfren