Командная строка и объекты
Интерпретатор командной строки
- Командная строка как общий принцип интерфейса
- Диалог «команда — ответ…» (aka REPL)
- Точнее: ввод → синтаксический анализ → интерпретация → вывод → …
- Совмещение потока данных и потока управления
- Редактор: подсказка, история, достраивание, поиск по истории
- Диалог «команда — ответ…» (aka REPL)
- Python:
консольный: классика и современный с раскраской
idle (в ALT выпилен в отдельный пакет вместе с TKinter, дабы не тащить зависимость на гррафическую подсистему), но в принципе — часть самого Python
- встроенные в IDE…
Jupyter (использует IPython)
- Интерпретатор: синтаксические ошибки vs ошибки времени выполнения
Другие реализации: исходный Python написан на Си
GraalPy — Python для GraalVM (это такая другая Java-машина от Oracle)
Brython — Python в браузере, написан на JS
PyPy, написан на… Python!
Встроенные: pocketpy, MicroPython, …
- …
Объекты и выражения с ними
- Целые, вещественные и комплексные числа
- длинные целые
- проблема представления вещественных
забегая вперёд: fractions.Decimal: и fractions.Fraction
- Строки
- Кортежи
Идентификатор объекта (id())
операции in и is (когда == не равно is)
Типы, type(), явное преобразование типов как конструктор
Типы — это объекты: type(9)("00531")
- Функции
Функция в Python — это именованная запись алгоритма (подпрограмма)
- ⇒ Duck typing
- Функции — это тоже просто объекты; пример — кортеж функций
- но
- потому что строгая типизация объектов!
Связывание объектов
- Создание и удаление объектов при интерпретации команд
Все перечисленные в предыдущем разделе объекты — константные
- Связывание объектов именами, чтобы не удалились
- Множественное связывание (многоместное c распаковкой последовательности)
- Функция, которая «возвращает много значений»
- Модифицируемые объекты — списки, словари, множества (беглый обзор)
- Связывание объектов ссылками из кортежей (и других составных типов)
- (забегая вперёд) Отличие связывания от присваивания на примере списков
Неявная динамическая строгая типизация: типизация объектов, но не имён:
213 + "123" — не заработает никогда;
A + B — заработает, если у A есть метод .__add__(), который умеет работать с объектами типа B
Если не вышло, можно наоборот — у B есть метод .__radd__(), который умеет работать с объектами типа A
Конструкции вида «+=» и вообще «∀=» для любых операций (см. simple_stmts.html)
Нечто про моржа
Операция (а не выделенный оператор) связывания: «:=», см pep-0572
Называется «walrus operator»
- основное применение (здравствуй, Си!):
- Но не только!
Кеш, треш и изоляция
- Связывание и refcount:
$ PYTHON_BASIC_REPL=1 python3 >>> a, b = 1092, 1092; c = 1092 >>> a is b is c True >>> a, b = 1092, 1092 >>> c = 1092 >>> a is b, a is c (True, False)
В новом варианте REPL — не так:
Наверное, отличие в том, одновременно ли происходит интерпретация? а нужно ли это знать?
- Но:
- …потому что константы -5…256 'всегда закешированы' (ещё раз: а нужно ли это знать??)
Что будет, если: - проблема кольцевых изолированных пространств имён
1 >>> a = [1, 2, "QQ"]; b = [a, 4]; a[1] = b 2 >>> a 3 [1, [[...], 4], 'QQ'] 4 >>> b 5 [[1, [...], 'QQ'], 4] 6 >>> a[1] is b 7 True 8 >>> b[0] is a 9 True 10 >>> c = a, b 11 >>> from sys import getrefcount 12 >>> getrefcount(a) 13 4 14 >>> getrefcount(c[1]) 15 4 16 >>> del a, b 17 >>> getrefcount(c[0]), getrefcount(c[1]) 18 (3, 3) 19 >>> del c
Нечто про gc (запускать в PYTHON_BASIC_REPL=1 python3)
Как посмотреть все ссылки на объект: gc.get_referrers()
Д/З
Прочитать и отщёлкать appetite.html, interpreter.html и introduction.html
- Добыть на рабочем компьютере
Python (не ниже 3.13, желательно 3.14, можно больше)
Редактор, в котором можно писать программы (idle есть почти всегда, например, в дистрибутивах ALT Linux он лежит в пакете python3-tools и называется idle3)
Монстры типа Spyder, WingIDE, PyCharm или VSCode не рекомендуются, но и не запрещаются
- Написать и запустить программу из файла, в котором написано:
1 print("QQ")
Для новоприбывших на спецкурс
Часть прошлого Д/З
Зарегистрироваться на факультетском EJudge (это же и регистрация на С/К)
- не забыть представиться (ФИО и группа в поле «имя»)!
(для тех, кто не успел в прошлый раз)
В следующий раз практическая часть Д/З уже будет более настоящей!
