Skip to content

Commit 757fd3e

Browse files
authored
gh-74929: locals() documentation update for PEP 667 (#118265)
Documentation wording taken from the withdrawn PEP 558 (which had switched to the Python level semantics proposed in PEP 667 prior to its withdrawal).
1 parent 8e750b8 commit 757fd3e

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed

Doc/library/functions.rst

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -636,8 +636,7 @@ are always available. They are listed here in alphabetical order.
636636

637637
.. note::
638638

639-
The default *locals* act as described for function :func:`locals` below:
640-
modifications to the default *locals* dictionary should not be attempted.
639+
The default *locals* act as described for function :func:`locals` below.
641640
Pass an explicit *locals* dictionary if you need to see effects of the
642641
code on *locals* after function :func:`exec` returns.
643642

@@ -1049,14 +1048,44 @@ are always available. They are listed here in alphabetical order.
10491048

10501049
.. function:: locals()
10511050

1052-
Update and return a dictionary representing the current local symbol table.
1053-
Free variables are returned by :func:`locals` when it is called in function
1054-
blocks, but not in class blocks. Note that at the module level, :func:`locals`
1055-
and :func:`globals` are the same dictionary.
1051+
Return a mapping object representing the current local symbol table, with
1052+
variable names as the keys, and their currently bound references as the
1053+
values.
1054+
1055+
At module scope, as well as when using ``exec()`` or ``eval()`` with a
1056+
single namespace, this function returns the same namespace as ``globals()``.
1057+
1058+
At class scope, it returns the namespace that will be passed to the
1059+
metaclass constructor.
1060+
1061+
When using ``exec()`` or ``eval()`` with separate local and global
1062+
namespaces, it returns the local namespace passed in to the function call.
1063+
1064+
In all of the above cases, each call to ``locals()`` in a given frame of
1065+
execution will return the *same* mapping object. Changes made through
1066+
the mapping object returned from ``locals()`` will be visible as bound,
1067+
rebound, or deleted local variables, and binding, rebinding, or deleting
1068+
local variables will immediately affect the contents of the returned mapping
1069+
object.
1070+
1071+
At function scope (including for generators and coroutines), each call to
1072+
``locals()`` instead returns a fresh dictionary containing the current
1073+
bindings of the function's local variables and any nonlocal cell references.
1074+
In this case, name binding changes made via the returned dict are *not*
1075+
written back to the corresponding local variables or nonlocal cell
1076+
references, and binding, rebinding, or deleting local variables and nonlocal
1077+
cell references does *not* affect the contents of previously returned
1078+
dictionaries.
1079+
1080+
.. versionchanged:: 3.13
1081+
In previous versions, the semantics of mutating the mapping object
1082+
returned from this function were formally undefined. In CPython
1083+
specifically, the mapping returned at function scope could be
1084+
implicitly refreshed by other operations, such as calling ``locals()``
1085+
again. Obtaining the legacy CPython behaviour now requires explicit
1086+
calls to update the initially returned dictionary with the results
1087+
of subsequent calls to ``locals()``.
10561088

1057-
.. note::
1058-
The contents of this dictionary should not be modified; changes may not
1059-
affect the values of local and free variables used by the interpreter.
10601089

10611090
.. function:: map(function, iterable, *iterables)
10621091

0 commit comments

Comments
 (0)