[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

__builtins__

loquehumaine

2/8/2008 8:25:00 AM

Hi there,
I'm a newby in python (I know a little in programmation) and I have
a lot of questions on builtins but my first one is about modules...

I have seen that if I type help() at a prompt, and then 'modules',
I'll be given a list of all modules available, thanks to this group..
But I have seen the differences between them and the one in
dir(__builtins__).
Why are some modules in __builtins__ and others don't ? (UserDict for
example)
Why dir(__builtins__) gives me "math" but not help(__builtins__) ?

What are the differences between __builtins__ and __builtin__ ? (By
the way, I have python 2.4)

Finally, if I do del(__builtins__), what can I do to repair the
"mistake" (as I got an import error __import__ not found if I want to
import __builtins__...?

That's may be obvious for you, but that's all strange to me and I
didn't find answers on the net...
3 Answers

Marc 'BlackJack' Rintsch

2/8/2008 9:27:00 AM

0

On Fri, 08 Feb 2008 00:25:14 -0800, loquehumaine wrote:

> I have seen that if I type help() at a prompt, and then 'modules',
> I'll be given a list of all modules available, thanks to this group..
> But I have seen the differences between them and the one in
> dir(__builtins__).
> Why are some modules in __builtins__ and others don't ? (UserDict for
> example)

`__builtins__` doesn't contain modules::

Python 2.4.4 (#2, Apr 12 2007, 21:03:11)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect
>>> inspect.getmembers(__builtins__, inspect.ismodule)
[]

> Why dir(__builtins__) gives me "math" but not help(__builtins__) ?

So there's no 'math' in `__builtins__`::

>>> 'math' in dir(__builtins__)
False

> What are the differences between __builtins__ and __builtin__ ? (By
> the way, I have python 2.4)

`__builtins__` is an implementation detail, and `__builtin__` is a name
of a module you can import. You should not use `__builtins__` but import
`__builtin__` and inspect that instead of `__builtins__`.

The (symmetric) difference of the two is empty::

>>> import __builtin__
>>> set(dir(__builtins__)).symmetric_difference(dir(__builtin__))
set([])

> Finally, if I do del(__builtins__), what can I do to repair the
> "mistake" (as I got an import error __import__ not found if I want to
> import __builtins__...?

Don't ``del __builtins__`` in the first place. :-)

> That's may be obvious for you, but that's all strange to me and I
> didn't find answers on the net...

So the real question is, why you see 'math' in `__builtins__`. It should
not be there.

Ciao,
Marc 'BlackJack' Rintsch

loquehumaine

2/8/2008 11:08:00 AM

0

Marc 'BlackJack' Rintsch a écrit :
> On Fri, 08 Feb 2008 00:25:14 -0800, loquehumaine wrote:
>
>> I have seen that if I type help() at a prompt, and then 'modules',
>> I'll be given a list of all modules available, thanks to this group..
>> But I have seen the differences between them and the one in
>> dir(__builtins__).
>> Why are some modules in __builtins__ and others don't ? (UserDict for
>> example)
>
> `__builtins__` doesn't contain modules::
You are right... I don't know why I thought there was math here... It's
not in sys.modules either...
Is there "a place" where you can find a list of 'some' available modules
('standard' ones like math, sys, ...) but not all, or I really need a
break during the week-end?
If so, what the difference between the 'present' and the 'missing' ones?

For example, in http://docs.python.org/mod... for math: "This
module is always available." unlike pickle or HTMLParser. Is this only
because of the versions of Python?

I think I have mixed-up a lot of things and that I need a little bit
more of readings about builtin things... (Doc that goes further than
http://docs.python.org/lib/bu...)

> Python 2.4.4 (#2, Apr 12 2007, 21:03:11)
> [GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import inspect
> >>> inspect.getmembers(__builtins__, inspect.ismodule)
> []
At least I have learn a new module =)


> `__builtins__` is an implementation detail, and `__builtin__` is a name
> of a module you can import. You should not use `__builtins__` but import
> `__builtin__` and inspect that instead of `__builtins__`.
Ok. Should I only see `__builtins__` as an access to builtin
functions/exception/... ?

> Don't ``del __builtins__`` in the first place. :-)
Fair enough ^_^

> So the real question is, why you see 'math' in `__builtins__`. It should
> not be there.
I think the answer is that I need more rest...

>
> Ciao,
> Marc 'BlackJack' Rintsch
Thanks a lot,

LHB

Ben Finney

2/9/2008 1:02:00 AM

0

LHB <loquehumaine@gmail.com> writes:

> Marc 'BlackJack' Rintsch a écrit :
> > `__builtins__` is an implementation detail, and `__builtin__` is a name
> > of a module you can import. You should not use `__builtins__` but import
> > `__builtin__` and inspect that instead of `__builtins__`.
> Ok. Should I only see `__builtins__` as an access to builtin
> functions/exception/... ?

No, if you want that access, explicitly 'import __builtin__' and
access them that way. Ignore '__builtins__' altogether as an
implementation detail. (This is difficult to adhere to because the
names are confusingly similar; this is an acknowledged wart in current
Python.)

IIRC this behaviour will change in Python 3.0, where 'import
__builtin__' will be the *only* way to get at builtins from normal
code. At least, I'm now writing my code as though that's the case :-)

--
\ â??The man who is denied the opportunity of taking decisions of |
`\ importance begins to regard as important the decisions he is |
_o__) allowed to take.â? â??C. Northcote Parkinson |
Ben Finney