У меня были некоторые трудности с модулями в Python. Я понял, что встроенные модули, написанные на C, похожи на часть интерпретатора Python, поэтому они доступны для программиста как принадлежащие встроенному пространству имен и, следовательно, не требуют импорта, Это ограничивается только этими модулями, а это означает, что все другие не встроенные модули стандартной библиотеки, написанные на Python, необходимо импортировать для использования?
Спасибо.
TL;DR: перед использованием вы должны импортировать каждый модуль, за исключением builtins
.
В отношении Python существует два разных типа "встроенных":
int
или os.chmod
.builtins
модуль, содержащий базовый набор объектов, таких как int
и help
. Вещи могут быть частью 1, не будучи частью 2, и наоборот. Например, help
- это чисто Python-функция, а os.chmod
является частью модуля os
. Тем не менее, большая часть содержимого в 2 также является частью 1 по практическим соображениям: builtins
средства используются часто, а скомпилированные объекты обычно имеют лучшую производительность.
Встроенные объекты могут представлять любой тип модуля, функции или объекта. Спецификация языка на самом деле не определяет, какие объекты являются встроенными, а какие встроенными. Детали варьируются в зависимости от реализации: CPython использует скомпилированные структуры и функции C, тогда как PyPy использует, например, скомпилированные объекты RPython.
Как правило, "все, что не определено кодом Python" является встроенным. Однако это не совсем так: встроенный объект может обращаться к интерпретатору для создания обычных объектов Python. Общим для всех встроенных компонентов является то, что они выглядят как обычные объекты Python, но их внутренние элементы могут следовать произвольным правилам.
Обратите внимание, что встроенная функция не обязательно встроена в интерпретатор. CPython предоставляет C API, а PyPy эмулирует его через cpyext, что позволяет интерпретатору загружать и использовать общие библиотеки. Многие сторонние библиотеки используют скомпилированные объекты и функции Cython для предоставления пользовательских встроенных функций. Однако можно использовать любой язык, который может создавать общие библиотеки, совместимые с C API.
builtins
модуль является фактическим модулем с именем builtins
. Все имена этого модуля всегда доступны во всех других модулях: поиск по builtins
производится всякий раз, когда имя не найдено в текущей области, содержащей ее области или текущем модуле.
Это похоже, но не так, как если бы в каждом модуле был from builtins import *
: если builtins
изменяются, имена встроенных отражают это.
>>> int(5)
5
>>> import builtins
>>> builtins.int = float
>>> int(5)
5.0
Например, _
в интерактивном сеансе Python является частью builtins
функций. Он изменяется при каждом запуске команды.
Отказ от ответственности: это только для демонстрации. Это действительно очень плохая идея модифицировать builtins
самостоятельно.
В то время как только имена из builtins
доступны без импорта, Python обычно импортирует несколько модулей при запуске.
$ python3 -c 'import sys;print(sys.modules.keys())'
dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'sitecustomize', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg'])
Некоторые из них являются частью высокоуровневых частей интерпретатора, например, sys
и importlib
. sitecustomize
и usercustomize
позволяют подготовить вашу среду - например, изменить внешний вид интерактивного интерпретатора, задать пути поиска в os.environment
и т.п.
.so
/ .dll
), который соответствует его C API - будь то скомпилированный из кода C, C ++, Fortran, Rust или любого другого.
import
)