| | __globals__ | global namespace in which |
| | | this function was defined |
+-----------+-------------------+---------------------------+
+| | __builtins__ | builtins namespace |
++-----------+-------------------+---------------------------+
| | __annotations__ | mapping of parameters |
| | | names to annotations; |
| | | ``"return"`` key is |
Add ``cr_origin`` attribute to coroutines.
+.. versionchanged:: 3.10
+
+ Add ``__builtins__`` attribute to functions.
+
.. function:: getmembers(object[, predicate])
Return all the members of an object in a list of ``(name, value)``
* Assignment expressions can now be used unparenthesized within set literals
and set comprehensions, as well as in sequence indexes (but not slices).
+* Functions have a new ``__builtins__`` attribute which is used to look for
+ builtin symbols when a function is executed, instead of looking into
+ ``__globals__['__builtins__']``.
+ (Contributed by Mark Shannon in :issue:`42990`.)
+
New Modules
===========
self.assertEqual(np.y, 2)
def test_new_builtins_issue_43102(self):
- self.assertEqual(
- namedtuple('C', ()).__new__.__globals__['__builtins__'],
- {})
+ obj = namedtuple('C', ())
+ new_func = obj.__new__
+ self.assertEqual(new_func.__globals__['__builtins__'], {})
+ self.assertEqual(new_func.__builtins__, {})
################################################################################
self.cannot_set_attr(self.b, '__globals__', 2,
(AttributeError, TypeError))
+ def test___builtins__(self):
+ self.assertIs(self.b.__builtins__, __builtins__)
+ self.cannot_set_attr(self.b, '__builtins__', 2,
+ (AttributeError, TypeError))
+
def test___closure__(self):
a = 12
def f(): print(a)
--- /dev/null
+Functions have a new ``__builtins__`` attribute which is used to look for
+builtin symbols when a function is executed, instead of looking into
+``__globals__['__builtins__']``. Patch by Mark Shannon and Victor Stinner.
{"__doc__", T_OBJECT, OFF(func_doc), 0},
{"__globals__", T_OBJECT, OFF(func_globals), READONLY},
{"__module__", T_OBJECT, OFF(func_module), 0},
+ {"__builtins__", T_OBJECT, OFF(func_builtins), READONLY},
{NULL} /* Sentinel */
};