Различия между версиями 2 и 3
Версия 2 от 2022-09-12 14:45:41
Размер: 7328
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2023-01-11 18:23:38
Размер: 7369
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 35: Строка 35:
  8 операция связывания `"="`   * операция связывания `"="`
Строка 46: Строка 46:
 * Операции вида «`+=`» (см. [[py3ref:simple_stmts.html#augmented-assignment-statements]])  * Конструкции вида «`+=`» для любых операций (см. [[py3ref:simple_stmts.html#augmented-assignment-statements]])

Командная строка и объекты

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

  • Командная строка как общий принцип интерфейса
    • Диалог «команда — ответ…»
      • Точнее: ввод → синтаксический анализ → интерпретация → вывод → …
      • Совмещение потока данных и потока управления
    • Редактор: подсказка, история, достраивание, поиск по истории
  • Python3:
    • консольный (классика)
      • Настройка, файл (~/.pythonstartup )

    • idle / pycrust / встроенные в IDE
    • bpython / ipython / …
  • Синтаксические ошибки / ошибки времени выполнения

Объекты и выражения с ними

  • Целые, вещественные и комплексные числа
    • длинные целые
    • проблема представления вещественных
      • забегая вперёд: fractions.Decimal: и fractions.Fraction

  • Все знаки операций и их старшинство

  • Строки
  • Кортежи
    • Идентификатор объекта (id())

    • операции in и is (когда == не равно is)

  • Типы, type(), преобразование типов

    • Типы — это объекты
  • Функции
    • Функция в Python — это именованная запись алгоритма (подпрограмма)

    • Функции — это тоже просто объекты

Связывание объектов

  • Создание и удаление объектов при интерпретации команд
    • Все перечисленные объекты — константные

  • Связывание объектов именами, чтобы не удалились
    • операция связывания "="

    • что такое dir() и globals() (а также locals())

      • (забегая) dir(объект)

    • Счётчик ссылок, sys.getrefcount(), правило удаления

    • del имя удаление имени, а не объекта

  • Множественное связывание (многоместное и распаковкой последовательности)
    • Функция, которая «возвращает много значений»
  • Модифицируемые объекты — списки, словари, множества (беглый обзор)
  • Связывание объектов ссылками из кортежей (и других составных типов)
    • (забегая вперёд) Отличие связывания от присваивания на примере списков
  • Неявная динамическая строгая типизация: типизация объектов, но не имён

  • Конструкции вида «+=» для любых операций (см. simple_stmts.html)

Нечто про моржа

Операция (а не выделенный оператор) связывания: «:=», см pep-0572

  • основное применение (здравствуй, Си!):
       1 while chunk := fp.read(200):
       2    print(chunk)
    
  • Но не только!
  • отличия от оператора связывания

  • примеры

Кеш, треш и изоляция

Связывание и refcount:

  • Как кешируются объекты? (а нужно ли это знать)
       1 >>> a, b = 1092, 1092; c = 1092
       2 >>> a is b is c
       3 True
       4 >>> a, b = 1092, 1092
       5 >>> c = 1092
       6 >>> a is b, a is c
       7 (True, False)
    
    • но
       1 >>> a, b = 92, 92
       2 >>> c = 92
       3 >>> a is b is c
       4 True
    
  • проблема кольцевых изолированных пространств имён
       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 >>> sys.getrefcount(a)
      12 4
      13 >>> sys.getrefcount(c[0])
      14 4
      15 >>> del a, b
      16 >>> sys.getrefcount(c[0])
      17 3
      18 >>> sys.getrefcount(c[1])
      19 3
      20 >>> del c
    
  • Нечто про gc

       1 >>> import gc
       2 >>> gc.disable()
       3 >>> gc.set_debug(gc.DEBUG_LEAK)
       4 >>> a = [1,.2,3]; a[1] = a
       5 >>> a
       6 [1, [...], 3]
       7 >>> hex(id(a))
       8 '0x7f699e930800'
       9 >>> del a
      10 >>> gc.collect()
      11 gc: collectable <list 0x7f699e930800>
      12 1
      13 >>> gc.garbage
      14 [[1, [...], 3]]
    
  • Как посмотреть все ссылки на объект: gc.get_referrers()

Д/З

  1. Прочитать и отщёлкать appetite.html, interpreter.html и introduction.html

  2. Добыть на рабочем компьютере
    • Python (третий, разумется)

    • Редактор, в котором можно писать программы (idle есть почти всегда, например, в дистрибутивах ALT Linux он лежит в пакете python3-tools и называется idle3)

    • Монстры типа WingIDE, PyCharm или Komodo не рекомендуются, но и не запрещаются

  3. Написать и запустить программу из файла, в котором написано:
    •    1 print("QQ")
      

Для новоприбывших на спецкурс

Часть прошлого Д/З

  1. Зарегистрироваться на факультетском EJudge (это же и регистрация на С/К)

  2. (для тех, кто не успел в прошлый раз)

    EJudge: HelloWorld 'Hello World'

    Написать программу, которая выводит строку Hello, world (в точности)

    Input:

    (ввод не нужен)
    Output:

    Hello, world

В следующий раз практическая часть Д/З уже будет более настоящей!

LecturesCMC/PythonIntro2022/01_Commandline (последним исправлял пользователь FrBrGeorge 2023-01-11 18:23:38)