Python – __builtin__ module in Python

modulepython

If I have a module Test and if I need to list all the functions in them, I do this:

import Test
dir(Test)

Unless I import the module I won't be able to use the functions defined in them.

But all the functions in __builtin__ module can be used without importing. But without import __builtin__ I am not able to do a dir(__builtin__). Does that mean we use the functions without importing the entire module?

from __builtin__ import zip

Is it something like the above? But if I do del zip, I get

NameError: name 'zip' is not defined

Can anyone please explain this behavior?

Best Solution

As explained in the Python language docs, names in Python are resolved by first looking them up in the local scope, then in any enclosing local scope, then in the module-level scope and finally in the namespace of the built-ins. So built-ins are somehow special-cased. They are not imported in your module's scope, but if a name is not found anywhere else, Python will look it up in the scope __builtin__.

Note that you can access the contents of this scope without importing it. A portable way to do this is

import sys
print(dir(sys.modules["__builtin__"]))

In CPython, this also works

print(dir(__builtins__))

but this is considered an implementation detail and might not be available for other Python implementations or future versions.