On Thu, Dec 17, 2015 at 12:53:13PM +0100, Victor Stinner quoted: > 2015-12-17 11:54 GMT+01:00 Franklin? Lee <leewangzhong+pyt...@gmail.com>:
> > Each function keeps an indirect, automagically updated > > reference to the current value of the names they use, Isn't that a description of globals()? If you want to look up a name "spam", you grab an indirect reference to it: globals()["spam"] which returns the current value of the name "spam". > > and will never need to look things up again.[*] How will this work? Naively, it sounds to me like Franklin is suggesting that on every global assignment, the interpreter will have to touch every single function in the module to update that name. Something like this: # on a global assignment spam = 23 # the interpreter must do something like this: for function in module.list_of_functions: if "spam" in function.__code__.__global_names__: function.__code__.__global_names__["spam"] = spam As I said, that's a very naive way to implement this. Unless you have something much cleverer, I think this will be horribly slow. And besides, you *still* need to deal with the case that the name isn't a global at all, but in the built-ins namespace. -- Steve _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com