Что изучать дальше?
Предположим, теперь ты знаешь кунг-фу, Нео мы изучили Python. Что дальше?
Синтаксис — семантика — прагматика — практика. Нельзя объять необъятного.
- Сам язык и use cases
- Приёмы разработки (планируется в следующем семестре)
- Методики и подходы типа ООП/mypy
- …
Главное: решать как можно больше своих практических задач.
Что мы не посмотрели в Python
(это очень жаль) Не было разговора про стиль оформления кода, хотя бы про pep-8 и best practices.
Языковые модули, такие как dataclasses, enum, weakref и т. п. Это как бы расширения языка, а мы его проигнорировали
- Инструменты разработки, встроенные в сам дистрибутив Python. Об этом — курс следующего семестра (+ сторонние инструменты, конечно)
Полезные для боевого программирования модули, типа os, pathlib, subprocess, http и т. п. — их довольно много
- …
http://PyPi.org: 499 888 проектов (Сколько там было осенью?)
Работа со сторонними пакетами (pip, venv и т .д.) — в курсе следующего семестра
Модули и пакеты
Как работает import
В частности, importer и finder (sys.meta_path)
Есть реализация на Python, можно почитать
$PYTHONPATH и sys.path
Модуль — это
Любой .py
Любой .so
Пакет — каталог с файлом __init__.py
Пакеты
Структура:
пакет/
__init__.py
(возможно) ещё что-то .py
- …
(возможно) подпакет/
__init__.py
(возможно) ещё что-то .py
- …
(возможно) подподпакет/
- …
(возможно) подпакет/
- …
Правила:
import пакет — только __init__.py
from пакет import что-то
from пакет import *, если в __init__.py есть __all__ = имена, — имена из __all__
относительный import (статья на Real Python)
для подмодулей пакета (чтобы не проимпортировать случайно не из соседнего модуля, а из sys.pth)
./pkg/two.py:from .sub import four ./pkg/two.py: ./pkg/two.py:SECOND = 2 ./pkg/two.py:print(f"{SECOND=} {four.FOURTH=}") ./pkg/sub/three.py:from ..two import SECOND ./pkg/sub/three.py:from ..sub.four import FOURTH ./pkg/sub/three.py: ./pkg/sub/three.py:THIRD = 3 ./pkg/sub/three.py:print(f"{SECOND=} {THIRD=} {FOURTH=}") ./pkg/sub/four.py:FOURTH = 4 ./pkg/one.py:from . import two ./pkg/one.py:from .sub import three ./pkg/one.py: ./pkg/one.py:FIRST = 1 ./pkg/one.py:print(f"{FIRST=} {two.SECOND=} {three.THIRD=}")
- …
Дополнительно
Модуль — это программа, if __name__ == "__main__"
Пакет — это программа, если есть пакет/__main__.py
python -m пакет
Cборники (namespace packages)
Нет __init__.py
Зато могут встречаться в нескольких местах sys.path:
. ├── one │ └── pkg │ └── first.py ├── prog.py └── two └── pkg └── second.py
Обзор стандартных модулей
Стандартные модули в докуентации
- Сам обзор — по времени сколько успеем
- В 3.12 повыкидывали разное легаси
- Как меняются модули от выпуска к выпуску
- Как часто появляются новые пакеты в стандартном дистрибутиве?
The Zen of Python, by Tim Peters
import this
import antigravity
Д/З
Доделать Д/З ☺