Различия между версиями 7 и 8
Версия 7 от 2015-03-05 17:01:32
Размер: 5900
Редактор: Class1
Комментарий:
Версия 8 от 2015-03-08 13:55:54
Размер: 5902
Редактор: localhost
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
== Длоги за прошлый раз == == Долги за прошлый раз ==
Строка 53: Строка 53:
== Модуль sys и нписание системных сценариев == == Модуль sys и написание системных сценариев ==

Функции (продолжение), генераторы, стандартные исключения; взаимодействие с ОС; сравнение версий

Долги за прошлый раз

Хешируемое константное множество frozenset

Ещё раз без спешки: передача функции в качестве параметра (например, sorted()/max() и cmp()/key())

Разбор домашних заданий

Функции (продолжение)

  • Вызываемый объект «fun(arg1, arg2, ...) is a shorthand for fun.__call__(arg1, arg2, ...)»

  • Умолчания для параметров (присваивание во время определения) и пропуск параметров
    • ⇒ Позиционные и именованные параметры
  • Функции-выражения (lambda)

  • Свёртка позиционных и именованных параметров
    • * и ** в списке формальных параметров

    • * и ** при вызове функции

      • BTW dict(key=val, …)

    • ⇒ переменное количество параметров
    • ⇒ произвольные (!) именованные параметры

    • «Лёгкость» свёртки
  • Рекурсия. Оценка необходимости рекурсии. Гвидо и хвостовая рекурсия.

Генераторы

  • Объекты-итераторы iter() из коллекции (.__iter__()) или из последовательности (.__getitem__())

    • .next() и StopIteration

    • Работа цикла for

  • Выражения-генераторы: для цикла лучше списков, но «одноразовые, что твои спорт-байкеры»
  • Генераторы: функции с yield вместо return

    • Параметрические: .send(par) вместо .next() ( ⇒ par = yield)

    • Управление: .close() и .throw(исключение)

Исключения

  • JT: Ошибки выполнения в интерпретируемых ЯП

  • Ошибки Python — объекты
    • raise

    • Иерархия (например, ArithmeticErrorZeroDivisionError)

  • try: … except:

    • Обработка всех или заданных исключений
    • Клаузы else: и finally:

    • Параметры исключений (у разных разные)
  • raise Exception("QQ", "QKRQ", …)

Ввод/вывод

  • Потоковый
    • Файловые объекты: open(), close(), read(), write(), readline() и итератор

    • Типизированные файлы: модуль struct.html

  • Сериализация: json.html и pickle.html

    • методы .dunp() и .load()

    • pickle умеет объекты!

    • json умеет не все hashable объекты в индексах

  • Индексированны доступ (БД): anydbm.html

    • dict-интерфейс

  • Спецфайлы: zipfile.html, json.html, configparser.html, …

Модуль sys и написание системных сценариев

  1. Обращайте внимание на пометку Availability:

  2. Обращайте внимание на пометку Deprecated

sys.html: Связь с системой: свойства самого python:

  • argv[]

  • exit()

  • stdin, stdout, stderr

  • getsizeof(), max…(), getrefcount()

  • ps1, ps2

os.html: Связь с операционной системой и обеспечение (относительной) кроссплатформенности:

  • Системные и другие libc-вызовы

    • Параметры процесса: environ[], chdir()/getcwd(), идентификаторы и флаги

    • Работа с файловым дескриптором вместо файлового объекта
    • Создание/удаление/переименование различных файловых объектов; получение и изменение их свойств
  • Манипуляция с именами файловых объектов (os.path.html)

  • Из используемого:
    • os.pipe(), os.tmpfile()

    • os.listdir(path)/os.makedirs(path[, mode])/os.removedirs(path)

    • os.stat(path), os.times()

    • os.urandom(n)

subprocess.html/subprocess32: Запуск подпроцессов и взаимодействие с ними /!\ TODO — достаточно, чтобы написать свой тестер

Время

/!\ TODO — достаточно, чтобы написать свой тестер

Сравнение версий

  • Posix diff

  • Сравнение версий и VCS (на примере git diff)

  • Модуль difflib

Д/З

Прочитать

  • /!\ что-то

Задачи и упражнения

  • (domari:TaskTester) Тестировщик домашних заданий

    Первая строка ввода — имя файла, содержащего программу на Python; в каждой паре последующих — имя файла с входными даннми и имя файла с эталонными выходными данными. Запустить введённую программу, передав ей на стандартный ввод входные данные, получить от неё вывод (стандартный вывод ошибок игнорировать) и сравнить его с эталоном. Вывести общее количество запусков и количество «успешных» запусков, вывод которых совпал с эталоном. Любую другую информацию можно выводить на стандартный вывод ошибок (sys.stderr).

    Input:

    DummyTest.py
    001.dat
    001.ans
    002.dat
    002.ans
    003.dat
    003.ans
    Output:

    2/3

    Более подробная формулировка и спойлер достуны по ссылке в названии задачи.


CategoryClass

Lectures/PythonIntro/2015-03-10 (последним исправлял пользователь Class1 2015-03-11 10:04:53)