__builtins__

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • loquehumaine@gmail.com

    #1

    __builtins__

    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...
  • Marc 'BlackJack' Rintsch

    #2
    Re: __builtins__

    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.getme mbers(__builtin s__, inspect.ismodul e)
    []
    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(__bui ltins__)).symme tric_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

    Comment

    • LHB

      #3
      Re: __builtins__

      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/modindex.html 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/builtin.html)
      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.getme mbers(__builtin s__, inspect.ismodul e)
      []
      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

      Comment

      • Ben Finney

        #4
        Re: __builtins__

        LHB <loquehumaine@g mail.comwrites:
        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

        Comment

        Working...