Строки, модули и файлы

Импорт модулей стандартной библиотеки

Содержание курса

Форма from … import и типичные конфликты имён

До этого момента мы всегда писали import math и обращались к функциям через точку: math.sqrt, math.pi. Это безопасно и явно. Но Python предлагает ещё один способ — перенести конкретное имя прямо в ваше пространство имён:

from math import sqrt, pi

print(sqrt(25))  # 5.0 — без префикса math
print(pi)        # 3.141592653589793

После такого импорта sqrt и pi доступны напрямую, без math. перед ними. Это удобно, когда функция используется часто и префикс только загромождает код.

Можно импортировать и одно конкретное имя:

from random import choice

print(choice(['камень', 'ножницы', 'бумага']))

Остальное содержимое random при этом недоступно — только то, что вы явно указали в from … import.

Где это создаёт проблемы

Первая ловушка — конфликт имён. Когда вы пишете from math import sqrt, имя sqrt появляется в вашем пространстве имён. Если чуть ниже вы создадите переменную с тем же именем, она тихо перезапишет функцию:

from math import sqrt

sqrt = 'просто строка'  # перезаписали функцию

print(sqrt(16))  # TypeError: 'str' object is not callable

При import math такого не случилось бы: ваша переменная называлась бы sqrt, а функция оставалась бы доступной как math.sqrt — в разных пространствах имён они не мешали бы друг другу.

Вторая ловушка — имя вашего файла. Если вы назовёте файл math.py или random.py, Python при выполнении import math найдёт ваш файл раньше, чем стандартный модуль, и импортирует его. В вашем файле нет ни sqrt, ни pi — получите AttributeError в самом неожиданном месте.

# Файл называется math.py
import math
print(math.sqrt(9))  # AttributeError: module 'math' has no attribute 'sqrt'

Решение простое: никогда не называйте свои файлы так же, как модули стандартной библиотеки. Если уже случилось — переименуйте файл и удалите кеш __pycache__.

Когда что использовать

import math — надёжный вариант по умолчанию. Пространства имён не пересекаются, и из кода сразу видно, откуда пришла каждая функция.

from math import sqrt оправдан, когда функция используется многократно и вы уверены, что имя не будет переопределено в том же файле. В коротких скриптах это нормально; в больших проектах — лучше придерживаться точечной нотации.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.