-
-
Notifications
You must be signed in to change notification settings - Fork 32.3k
gh-74929: locals() documentation update for PEP 667 #118265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -632,8 +632,7 @@ are always available. They are listed here in alphabetical order. | |
|
||
.. note:: | ||
|
||
The default *locals* act as described for function :func:`locals` below: | ||
modifications to the default *locals* dictionary should not be attempted. | ||
The default *locals* act as described for function :func:`locals` below. | ||
Pass an explicit *locals* dictionary if you need to see effects of the | ||
code on *locals* after function :func:`exec` returns. | ||
|
||
|
@@ -1041,14 +1040,44 @@ are always available. They are listed here in alphabetical order. | |
|
||
.. function:: locals() | ||
|
||
Update and return a dictionary representing the current local symbol table. | ||
Free variables are returned by :func:`locals` when it is called in function | ||
blocks, but not in class blocks. Note that at the module level, :func:`locals` | ||
and :func:`globals` are the same dictionary. | ||
Return a mapping object representing the current local symbol table, with | ||
variable names as the keys, and their currently bound references as the | ||
values. | ||
|
||
At module scope, as well as when using ``exec()`` or ``eval()`` with a | ||
single namespace, this function returns the same namespace as ``globals()``. | ||
|
||
At class scope, it returns the namespace that will be passed to the | ||
metaclass constructor. | ||
|
||
When using ``exec()`` or ``eval()`` with separate local and global | ||
namespaces, it returns the local namespace passed in to the function call. | ||
|
||
In all of the above cases, each call to ``locals()`` in a given frame of | ||
execution will return the *same* mapping object. Changes made through | ||
the mapping object returned from ``locals()`` will be visible as bound, | ||
rebound, or deleted local variables, and binding, rebinding, or deleting | ||
local variables will immediately affect the contents of the returned mapping | ||
object. | ||
|
||
At function scope (including for generators and coroutines), each call to | ||
``locals()`` instead returns a fresh dictionary containing the current | ||
bindings of the function's local variables and any nonlocal cell references. | ||
In this case, name binding changes made via the returned dict are *not* | ||
written back to the corresponding local variables or nonlocal cell | ||
references, and binding, rebinding, or deleting local variables and nonlocal | ||
cell references does *not* affect the contents of previously returned | ||
dictionaries. | ||
|
||
.. versionchanged:: 3.13 | ||
In previous versions, the semantics of mutating the mapping object | ||
returned from this function were formally undefined. In CPython | ||
specifically, the mapping returned at function scope could be | ||
implicitly refreshed by other operations, such as calling ``locals()`` | ||
again. Obtaining the legacy CPython behaviour now requires explicit | ||
calls to update the initially returned dictionary with the results | ||
of subsequent calls to ``locals()``. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I plan to eventually replace the latter two sentences here with something like "For details, refer to the 'Python 3.13 porting guide'" (with a link to the relevant part of the 3.13 What's New document). That will be in a later PR that adds an initial version of the What's New update for PEP 667, though. |
||
|
||
.. note:: | ||
The contents of this dictionary should not be modified; changes may not | ||
affect the values of local and free variables used by the interpreter. | ||
|
||
.. function:: map(function, iterable, *iterables) | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.