Removed Implementation Limitations section. While the version of the code on http://bugs.python.org/issue24965 has the 255 expression limitation, I'm going to remove this limit. The i18n section was purely speculative. We can worry about it if/when we add i18n and i-strings.
This commit is contained in:
parent
2025cc03c5
commit
c377e4765f
55
pep-0498.txt
55
pep-0498.txt
|
@ -634,61 +634,6 @@ if written from scratch using f-strings.
|
|||
print("Usage: {0} [{1}]".format(sys.argv[0], '|'.join('--'+opt for opt in valid_opts)), file=sys.stderr)
|
||||
print(f"Usage: {sys.argv[0]} [{'|'.join('--'+opt for opt in valid_opts)}]", file=sys.stderr)
|
||||
|
||||
Implementation limitations
|
||||
==========================
|
||||
|
||||
Maximum of 255 expressions
|
||||
--------------------------
|
||||
|
||||
Due to a CPython limit with the number of parameters to a function, an
|
||||
f-string may not contain more that 255 expressions. This includes
|
||||
expressions inside format specifiers. So this code would count as
|
||||
having 2 expressions::
|
||||
|
||||
f'{x:.{width}}'
|
||||
|
||||
The same expression used multiple times
|
||||
---------------------------------------
|
||||
|
||||
Every expression in an f-string is evaluated exactly once for each
|
||||
time it appears in the f-string. However, when the same expression
|
||||
appears more than once in an f-string, it's undefined which result
|
||||
will be used in the resulting string value. This only matters for
|
||||
expressions with side effects.
|
||||
|
||||
For purposes of this section, two expressions are the same if they
|
||||
have the exact same literal text defining them. For example, ``'{i}'``
|
||||
and ``'{i}'`` are the same expression, but ``'{i}'`` and ``'{i }'``
|
||||
are not, due to the extra space in the second expression.
|
||||
|
||||
For example, given::
|
||||
|
||||
>>> def fn(lst):
|
||||
... lst[0] += 1
|
||||
... return lst[0]
|
||||
...
|
||||
>>> lst=[0]
|
||||
>>> f'{fn(lst)} {fn(lst)}'
|
||||
'1 2'
|
||||
|
||||
The resulting f-string might have the value ``'1 2'``, ``'2 2'``,
|
||||
``'1 1'``, or even ``'2 1'``.
|
||||
|
||||
However::
|
||||
|
||||
>>> lst=[0]
|
||||
>>> f'{fn(lst)} { fn(lst)}'
|
||||
'1 2'
|
||||
|
||||
This f-string will always have the value ``'1 2'``. This is due to the
|
||||
two expressions not being the same: the space in the second example
|
||||
makes the two expressions distinct.
|
||||
|
||||
This restriction is in place in order to allow for a possible future
|
||||
extension allowing translated strings, wherein the expression
|
||||
substitutions would be identified by their text representations in the
|
||||
f-strings.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
|
|
Loading…
Reference in New Issue