Различия между версиями 1 и 2
Версия 1 от 2022-09-10 16:11:29
Размер: 5398
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2022-09-12 14:45:41
Размер: 7328
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
<<MiniPage(----\n'''~+Это копипаста аналогичного материала прошлых лет; возможно, её надо отредактировать+~'''----\n)>>
Строка 36: Строка 35:
  * `dir()` и `globals()`   8 операция связывания `"="`
  * что такое [[py3doc:functions#dir|dir()]] и [[py3doc:functions#globals|globals()]] (а также `locals()`)
Строка 58: Строка 58:
== Кеш, треш и изоляция ==
Связывание и refcount:
 * Как кешируются объекты? (а нужно ли это знать)
 {{{#!python
>>> 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)
 }}}
   но
 {{{#!python
>>> a, b = 92, 92
>>> c = 92
>>> a is b is c
True
}}}
 * проблема кольцевых изолированных пространств имён
 {{{#!python
>>> a = [1, 2, "QQ"]; b = [a, 4]; a[1] = b
>>> a
[1, [[...], 4], 'QQ']
>>> b
[[1, [...], 'QQ'], 4]
>>> a[1] is b
True
>>> b[0] is a
True
>>> c = a, b
>>> sys.getrefcount(a)
4
>>> sys.getrefcount(c[0])
4
>>> del a, b
>>> sys.getrefcount(c[0])
3
>>> sys.getrefcount(c[1])
3
>>> del c
}}}
  * [[https://pythontutor.com/visualize.html#code=a%20%3D%20%5B1,%202,%20%22QQ%22%5D%0Ab%20%3D%20%5Ba,%204%5D%0Aa%5B1%5D%20%3D%20b%0Aprint%28a%5B1%5D%20is%20b,%20b%5B0%5D%20is%20a%29%0Ac%20%3D%20a,%20b%0Adel%20a,%20b%0Adel%20c&cumulative=true&curInstr=0&heapPrimitives=true&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false|Посмотреть на pythontutor]]
 * Нечто про [[py3doc:gc]]
 {{{#!python
>>> import gc
>>> gc.disable()
>>> gc.set_debug(gc.DEBUG_LEAK)
>>> a = [1,.2,3]; a[1] = a
>>> a
[1, [...], 3]
>>> hex(id(a))
'0x7f699e930800'
>>> del a
>>> gc.collect()
gc: collectable <list 0x7f699e930800>
1
>>> gc.garbage
[[1, [...], 3]]
}}}
 * Как посмотреть все ссылки на объект: [[py3doc:gc.html#gc.get_referrers|gc.get_referrers()]]
Строка 63: Строка 125:
  * Написать и запустить программу из файла, в котором написано:   * Монстры типа WingIDE, !PyCharm или Komodo не рекомендуются, но и не запрещаются
 1.
Написать и запустить программу из файла, в котором написано:
Строка 67: Строка 130:
 1. [[http://ejudge.cs.msu.ru/register?action=207&contest_id=164|Зарегистрироваться в EJudge (164 турнир)]]
  * [[
Python/PsyPython2018/EjudgeRegistration|Пошаговая инструкция]] (делаем поправку на номер турнира)
  * не забыть представиться (ФИО и группа в поле «имя»)!
  * [[http://ejudge.cs.msu.ru/new-client?contest_id=164|Ссылка для уже зарегистрированных]]
 1. <<EJCMC(164, HelloWorld, Hello World)>>
=== Для новоприбывших на спецкурс ===
Часть прошлого Д/З
1.#0 [[https://uneex.org/Python/PsyPython2018/EjudgeRegistration|Зарегистрироваться]] на факультетском EJudge (это же и регистрация на С/К)
  * не забыть представиться (ФИО и группа в поле «имя»)!
  * [[http://ejudge.cs.msu.ru/new-client?contest_id=230|Ссылка для уже зарегистрированных]]
 1. (для тех, кто не успел в прошлый раз) <<EJCMC(164, HelloWorld, Hello World)>>
В следующий раз практическая часть Д/З уже будет более настоящей!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • что такое 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)