Различия между версиями 9 и 10
Версия 9 от 2017-10-15 20:33:50
Размер: 2841
Редактор: FrBrGeorge
Комментарий:
Версия 10 от 2017-10-15 21:06:15
Размер: 2842
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 21: Строка 21:
 * функция как объект: именование, передача в качестве параметра   * функция как объект: именование, передача в качестве параметра
Строка 59: Строка 59:
 * <<EJCMC(86, GenMult, Повторитель)>>  * <<EJCMC(86, GenTriseq, Повторитель)>>

Функции и генераторы

Разбор Д/З №2

Условное выражение A if C else B

Цикл for: повторение

  • iter(объект) → объект-итератор (.__getitem__() или .__iter__())

  • next() и StopIteration

  • range(), reversed(), enumerate(), zip()

Кстати, zip() не было, а зря!

Функции

Пространства имён: повторение

  • Задание функции: формальные и фактические параметры, return

  • Duck typing: функция как формализация алгоритма

  • функция как локальное пространство имён

    • определение локальности по связыванию, global

    • nonlocal для вложенных функций

  • функция как объект: именование, передача в качестве параметра
  • лямбда-функции (функции-выражения)

Распаковка и запаковка последовательностей

  • при связывании
  • в цикле for

  • при передаче параметров в функцию
    • распаковка
    • запаковка
    • функция с произвольным числом параметров

Генераторы

Повторно-входимые функции as is

Pуthon3: генераторы

  • Задание: yield

  • Принцип работы
  • это же итератор!

Параметрические итераторы:

  • a = yield b, первый p0 = next(gen), дальше pk = gen.send(a)

== Itertools = Если успеем

py2lib:itertools.html

Неполные вычисления (например, с бесконечными итераторами)

Полезности: комбинаторика, повторители, …

Д/З

  • {i} Прочитать про функции, итераторы и генераторы в учебнике

  • Как одним print()-ом вывести все элементы произвольного кортежа Python3 через пробел?

  • Придумать пример «из жизни» для вложенного задания функции
  • EJudge: Det4x4 'Определитель матрицы 4×4'

    Матрица 4×4 задаётся кортежем из 4 кортежей по 4 целых числа в каждом. Посчитать определитель этой матрицы. Допустимо заранее составить (а не вычислять на ходу) последовательность из всех перестановок индексов и знаков этих перестановок.

    Input:

    (5, -4, 4, -7), (1, -2, 6, 0), (3, -8, -6, -4), (-1, 2, -9, 3)
    Output:

    702
  • EJudge: EvalFunction 'Сложение и умножение'

    Ввести строку, содержащую выражение ЯП Python3. В строке, помимо стандартных действий над объектами, может встречаться вызов функции Add(a,b) (возвращает сумму a и b) и Mul(a,b) (возвращает произведение a и b). Вычислить и вывести значение этого выражения.

    Input:

    Mul(Add(-2,5),Add((1,2),(100,500)))[3:]
    Output:

    (500, 1, 2, 100, 500, 1, 2, 100, 500)
  • EJudge: IterPi 'Расстояние от Пи'

    Пользуясь формулой Лейбница для вычисления числа Пи:

    • LeibnitzPi.png

    написать бесконечный генератор pigen(), возвращающий последовательно 4, 4-4/3, 4-4/3+4/5, …; ввести некоторое расстояние E и вывести номер элемента этой последовательности, первым попадающего в E/2-окрестность числа Пи. Внимание! Тесты написаны из расчёта, что проверка такая: как только очередное значение pigen() по модулю перестанет отличаться от предыдущего значения больше, чем на E, выводим, на каком обороте цикла это произошло.

    Input:

    0.001
    Output:

    2000
  • EJudge: GenTriseq 'Повторитель'

    Ввести кортеж целых чисел V, затем число N. Написать генератор, возвращающий сначала все числа из кортежа (в порядке следования), не превосходящие его нулевой элемент, затем все числа, не превосходящие первый, и т. д. вплоть до последнего элемента. Вывести N-й элемент этой последовательности, или "NO", если таковой не существует.

    Input:

    10, 10, 1, 7, 8, 0, 5
    10
    Output:

    7

LecturesCMC/PythonIntro2017/04_Functions (последним исправлял пользователь FrBrGeorge 2017-10-26 15:48:57)