简体   繁体   中英

__builtin__ module in Python

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?

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.

when python interpreter start, it will by default execute something like

from __builtin__ import *

which allows you to use all the functions/attributes defined inside __builtin__ module

However to use __builtin__ symbol itself, you need to do

import __builtin__

this is how import statement syntax works.

I'm by no means knowledgeable about python, but maybe dir(__builtins__) , with an "s", is what you're after?

Works for me on plain Python 3.1.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM