Модуль __builtin__ в Python - PullRequest
       5

Модуль __builtin__ в Python

4 голосов
/ 16 марта 2011

Если у меня есть модуль Test и если мне нужно перечислить все функции в них, я делаю это:

import Test
dir(Test)

Если я не импортирую модуль, я не смогу использовать функции, определенные в них.

Но все функции в модуле __builtin__ можно использовать без импорта. Но без import __builtin__ я не смогу сделать dir(__builtin__). Означает ли это, что мы используем функции без импорта всего модуля?

from __builtin__ import zip

Это что-то вроде выше? Но если я сделаю del zip, я получу

NameError: имя 'zip' не определено

Может кто-нибудь объяснить, пожалуйста, это поведение?

Ответы [ 3 ]

7 голосов
/ 16 марта 2011

Как объяснено в документации по языку Python , имена в Python разрешаются, сначала просматривая их в локальной области, затем в любой включающей локальной области, затем в области уровня модуля и, наконец, вПространство имен встроенных.Так что встроенные модули как-то особые.Они не импортируются в область видимости вашего модуля, но если имя не найдено где-либо еще, Python будет искать его в области видимости __builtin__.

Обратите внимание, что вы можете получить доступ к содержимомуэтой области, не импортируя это.Портативный способ сделать это -

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

. В CPython это также работает

print(dir(__builtins__))

, но это считается подробностью реализации и может быть недоступно для других реализаций Python или будущих версий..

1 голос
/ 25 апреля 2012

при запуске интерпретатора Python по умолчанию он выполняет что-то вроде

from __builtin__ import *

, который позволяет вам использовать все функции / атрибуты, определенные внутри __builtin__ module

Однако, чтобы использовать __builtin__ сам символ, вам нужно сделать

импорт __builtin__

так работает синтаксис оператора импорта.

1 голос
/ 16 марта 2011

Я отнюдь не разбираюсь в питоне, но, возможно, dir(__builtins__), с "s", это то, что вы ищете?

У меня работает на простом Python 3.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...