Различия между версиями 14 и 15
Версия 14 от 2015-03-10 14:46:58
Размер: 7543
Редактор: localhost
Комментарий:
Версия 15 от 2015-03-10 14:49:57
Размер: 7551
Редактор: localhost
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 97: Строка 97:
  * [[pydoc:struct.html]]
  * [[pydoc:json.html]] и [[pydoc:pickle.html]]
  * [[pydoc:anydbm.html]]
  * [[pydoc:zipfile.html]], [[pydoc:json.html]], [[pydoc:configparser.html]], …
## * [[pydoc:struct.html]]
## * [[pydoc:json.html]] и [[pydoc:pickle.html]]
## * [[pydoc:anydbm.html]]
## * [[pydoc:zipfile.html]], [[pydoc:json.html]], [[pydoc:configparser.html]], …

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

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

Хешируемое константное множество 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

Исключения

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

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

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

  • try: … except:

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

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

Ввод/вывод

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

Модуль 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: Запуск подпроцессов и взаимодействие с ними

  • Простейший вызов вида .call()

  • Работа с Popen-объектом

    • Перенаправление В/В (в т. ч. в канал)
    • Проблема буферизации В/В (когда завершается операция write?)

    • Проблема синхронизации В/В
  • .poll() и .terminate()

time.html: .clock(), .time(), .strftime() и .sleep()

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

Д/З

Прочитать

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

  • Строки:

    (domari:MaxSubst) Подстрока максимальной длины из разных букв

    Ввести строку и вывести ближайшую к началу подстроку максимальной длины, содержащую только различные символы.

    Input:

    qweqweASDFGHASDFGASasdfghas123
    Output:

    DFGASasdfgh
  • Функции:

    (domari:GuessSigns) Вставить знаки в целочисленное выражение

    Ввести последовательность натуральных чисел через пробел (не более 12), и вывести YES, если можно ли между этими числами вставить произвольные знаки сложения или вычитания и один знак "=", чтобы получилось равенство. Вывести NO, если нельзя. Унарные операции и пропуск знака не допускаются.

    Input:

    123 234 345 12
    Output:

    YES

    Спойлер по ссылке

  • Генератор:

    (domari:RandomGen) Найти число в псевдослучайной последовательности

    Ввести через запятую натуральные числа X0, a, c и m (c также может быть равно 0); на следующей строке ввести натуральное число Y. Использовать генератор последовательности псевдослучайных чисел линейным конгруэнтным методом и проверить, встречается ли Y в последовательности Xn+1 = (aXn + c) mod m (это и есть упомянутый метод :) ). Вывести YES, если встречается и NO, если нет.

    Input:

    7,7,7,10
    6
    Output:

    YES
  • (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)