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:
Eric V. Smith 2015-09-04 15:01:35 -04:00
parent 2025cc03c5
commit c377e4765f
1 changed files with 0 additions and 55 deletions

View File

@ -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
==========