mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Add comment to subtle dataclass code (gh-96133)
In the PR that made this change, 1st1 left a "note to self: add a comment explaining this". This comment was never added. https://github.com/python/cpython/pull/9518/files#r280608117 I was reading this code and it wasn't obvious to me why we weren't exec-ing directly into locals. So I got to learn something new :-) https://docs.python.org/3/reference/executionmodel.html#interaction-with-dynamic-features
This commit is contained in:
parent
9e8b86de4e
commit
72b5a55bc8
1 changed files with 4 additions and 0 deletions
|
@ -429,6 +429,10 @@ def _create_fn(name, args, body, *, globals=None, locals=None,
|
|||
# Compute the text of the entire function.
|
||||
txt = f' def {name}({args}){return_annotation}:\n{body}'
|
||||
|
||||
# Free variables in exec are resolved in the global namespace.
|
||||
# The global namespace we have is user-provided, so we can't modify it for
|
||||
# our purposes. So we put the things we need into locals and introduce a
|
||||
# scope to allow the function we're creating to close over them.
|
||||
local_vars = ', '.join(locals.keys())
|
||||
txt = f"def __create_fn__({local_vars}):\n{txt}\n return {name}"
|
||||
ns = {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue