Командная строка и объекты
Интерпретатор командной строки
- Командная строка как общий принцип интерфейса
- Диалог «команда — ответ…» (aka REPL)
- Точнее: ввод → синтаксический анализ → интерпретация → вывод → …
- Совмещение потока данных и потока управления
- Редактор: подсказка, история, достраивание, поиск по истории
- Диалог «команда — ответ…» (aka REPL)
- Python:
- Синтаксические ошибки / ошибки времени выполнения
Объекты и выражения с ними
- Целые, вещественные и комплексные числа
- длинные целые
- проблема представления вещественных
забегая вперёд: fractions.Decimal: и fractions.Fraction
- Строки
- Кортежи
Идентификатор объекта (id())
операции in и is (когда == не равно is)
Типы, type(), преобразование типов
- Типы — это объекты
- Функции
Функция в Python — это именованная запись алгоритма (подпрограмма)
- Функции — это тоже просто объекты
Связывание объектов
- Создание и удаление объектов при интерпретации команд
Все перечисленные объекты — константные
- Связывание объектов именами, чтобы не удалились
- Множественное связывание (многоместное и распаковкой последовательности)
- Функция, которая «возвращает много значений»
- Модифицируемые объекты — списки, словари, множества (беглый обзор)
- Связывание объектов ссылками из кортежей (и других составных типов)
- (забегая вперёд) Отличие связывания от присваивания на примере списков
Неявная динамическая строгая типизация: типизация объектов, но не имён
Конструкции вида «+=» и вообще «∀=» для любых операций (см. simple_stmts.html)
Нечто про моржа
Операция (а не выделенный оператор) связывания: «:=», см pep-0572
Называется «walrus operator»
- основное применение (здравствуй, Си!):
- Но не только!
Кеш, треш и изоляция
Связывание и refcount:
- Как кешируются объекты? (а нужно ли это знать)
- но
- проблема кольцевых изолированных пространств имён
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 >>> import sys 12 >>> sys.getrefcount(a) 13 4 14 >>> sys.getrefcount(c[0]) 15 4 16 >>> del a, b 17 >>> sys.getrefcount(c[0]) 18 3 19 >>> sys.getrefcount(c[1]) 20 3 21 >>> del c
Нечто про gc
Как посмотреть все ссылки на объект: gc.get_referrers()
Д/З
Прочитать и отщёлкать appetite.html, interpreter.html и introduction.html
- Добыть на рабочем компьютере
Python (желательно 3.11, к ноябрю — обязательно 3.11+)
Редактор, в котором можно писать программы (idle есть почти всегда, например, в дистрибутивах ALT Linux он лежит в пакете python3-tools и называется idle3)
Монстры типа WingIDE, PyCharm или Komodo не рекомендуются, но и не запрещаются
- Написать и запустить программу из файла, в котором написано:
1 print("QQ")
Для новоприбывших на спецкурс
Часть прошлого Д/З
Зарегистрироваться на факультетском EJudge (это же и регистрация на С/К)
- не забыть представиться (ФИО и группа в поле «имя»)!
(для тех, кто не успел в прошлый раз)
EJudge: HelloWorld 'Hello World'
Написать программу, которая выводит строку Hello, world (в точности)
(ввод не нужен)
Hello, world
В следующий раз практическая часть Д/З уже будет более настоящей!