On Tue, Dec 31, 2013 at 10:00:32PM -0500, eryksun wrote: > On Tue, Dec 31, 2013 at 4:27 AM, spir <denis.s...@gmail.com> wrote: > > In addition, "iter" is also the name of a builtin function, like "print". > > While iter is a built-in function, it would be clearer if you > referenced the __builtins__ namespace.
Don't use __builtins__! Firstly, it's an implementation detail only in CPython, not part of the language. So it doesn't exist in Jython or IronPython: Jython 2.5.1+ (Release_2_5_1, Aug 4 2010, 07:18:19) [OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27 Type "help", "copyright", "credits" or "license" for more information. >>> import __builtins__ Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named __builtins__ __builtins__ with-an-s is a crappy hack that has never worked correctly and has caused more confusion than help: https://mail.python.org/pipermail/python-3000/2007-March/006170.html "Restricted mode" in CPython has never worked correctly, __builtins__ has always been an implementation-specific detail, and you should never use it. The one you actually want is "__builtin__" (no "s") in Python 2, or "builtins" (no underscores) in Python 3. > Built-in objects are linked > into the interpreter, either statically or from a shared library (.so, > .pyd). But the __builtins__ namespace can and does include names for > non-built-in objects (e.g. help and exit). Only when running interactively, and only when site.py runs. If you remove or disable site.py, the help and exit functions don't get added. Actually, there's nothing special about site.py, anyone or anything could monkey-patch builtins. Don't do this: py> spam # Does spam variable exist? Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'spam' is not defined py> import builtins py> builtins.spam = "spam spam spam" py> del builtins py> spam 'spam spam spam' > The important point in this > context is that iter is in the builtins module, not that it's a > built-in function. There are lots of built-in objects that aren't in > builtins. I'm afraid I've lost the context, and don't understand why this is important. It's true that not all built-in objects are in builtins, and not all objects in builtins are built-in, but other than for pedantic correctness, why does this matter? -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor