On Thu, 12 Mar 2020 at 14:09, Paul Moore <[email protected]> wrote: > > On Thu, 12 Mar 2020 at 16:57, Eric Wieser <[email protected]> wrote: > > > > It looks like actually this can be be built as a function today: > > > > def move(name): > > return inspect.currentframe().f_back.f_locals.pop(name) > > > > Which works as follows, but it feels awkward to pass variable names by > > strings (and will confuse linters): > > > > >>> for v in itertools.combinations([1, 2, 3], 1): > > ... print(id(move("v"))) > > 1718903397008 > > 1718903397008 > > 1718903397008 > > I'm both impressed and horrified by this :-) >
Even - it just works because it is on the top-level scope of a module - and would not work if called from a function, where `locals()` modification actually do not affect the local variables. (And that behavior that was sort of "in the air" was well documented and defined prior to Python 3.8 in PEP 558) But for the module-level-scope locals() == globals() is just a plain dictionary, not one working as a proxy to slotted local variables (And in a class body, locals() is watever is returned from the metaclass `__prepare__` method ) > Paul > _______________________________________________ > Python-ideas mailing list -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/[email protected]/message/42KOI2RBK7PI4IAZZARAANKE5BIKL7KS/ > Code of Conduct: http://python.org/psf/codeofconduct/ _______________________________________________ Python-ideas mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/U7MPJNVBBTFQHK55TBLML7CJFQXPUN75/ Code of Conduct: http://python.org/psf/codeofconduct/
