Различия между версиями 4 и 5
Версия 4 от 2018-09-28 17:21:23
Размер: 5192
Редактор: FrBrGeorge
Комментарий:
Версия 5 от 2018-09-28 17:36:14
Размер: 5219
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 60: Строка 60:
 1. <<EJCMC(113, ThreeBack, Три числа через запятую)>>
 1. <<EJCMC(113, ThreeFun, Три числа)>>
 1. <<EJCMC(113, ThreeBack, Три объекта через запятую)>>
 1. <<EJCMC(113, ThreeFun, Три объекта — функция)>>

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

Функции

  • Функция Python3 как именованный алгоритм
    • Отличие от функции в строгом смысле (преобразование данных определённого типа в данные (другого?) определённого типа)
    • функция — это просто объект
    • правда, он callable() (но бывают и другие callable-объекты)

      • т. е. объект, который можно вызвать с помощью объект()

    • Какие callable-объекты нам уже известны (например, типы, bin(), print() и т. п.)

  • Задание и вызов функции
    • Формат задания функции
    • Синтаксически значимый сдвиг
    • Формальные и фактические параметры
    • Возвращаемое значение функции
      • {i} Как вернуть два значения? :)

  • Duck typing: все объекты строго типизированы, но по имени этого не скажешь
    • ⇒ функция выполнится, если все операции в ней применимы к переданным объектам
  • Локальные и глобальные имена, правила видимости
    • globals() и locals()

    • Проблема «побочного эффекта»: разрешать или не разрешать связывание с помощью глобальных имён внутри функции:
      1. Есть связывание ⇒ имя локальное
      2. global

    • Пример

  • Строка документации, help(функция)

  • Распаковка и запаковка параметров
    • fun(*seq), fun(a,b,*seq)

    • def fun(*seq):, def fun(a,b, *seq):

    • всё равно передаётся именно кортеж

Генераторы

  • Несколько разных алгоритмов по очереди?

    • сколько?
    • интерфейс?
    • последовательность

  • Если в коде функции есть yield, то она порождает генератор

  • next(генератор) и StopIteration

  • Генератор — это последовательность!

О решении домашних заданий

  • Текстовый редактор/IDE/whatever
    • idle (linux: idle3)

      • командная строка idle3

    • vim
    • geany (не забыть настроить табуляции и python3 вместо python)

    • WingIDE
  • Ввод и вывод
    • Ввод — input() (строка ⇒ преобразование типов или eval(input)))

    • Вывод — print()

  • Ejudge (113-й турнир)

    • проверка — ввод тестовых входных данных и сопоставление вывода с шаблоном
      • ⇒ вывод только того, что запрошено, никаких подсказок в input() и объяснительных текстов

    • Типы задач:
      1. Написать программу: вводит и выводит
      2. Написать функцию (или генератор, или несколько в одном файле): входной тест — это программа, использующая функцию, выходной — текст
        • Никаких операторов вне функций, только сами функции

        • Названия функций должны совпадать с таковыми в домашних заданиях
      3. Написать класс: входной тест — это программа, использующая класс, выходной — текст
  • Важно: о «парковке на слух»

Д/З

  1. Прочесть и прощёлкать третью и четвёртую главы учебника (четвёртая глава — это упражнения)

  2. EJudge: HelloWorld 'Hello World'

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

    Input:

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

    Hello, world
  3. EJudge: ThreeBack 'Три объекта через запятую'

    Ввести три python3-объекта через запятую (с помощью eval(input())), вывести их через пробел, причём в обратном порядке

    Input:

    "345", 100500, -2
    Output:

    -2 100500 345
  4. EJudge: ThreeFun 'Три объекта — функция'

    Написать функцию по имени function() от трёх параметров, которая возвращает кортеж из двух объектов — последнего и первого. Напоминаю, что в этом случае в примере не входной текст, а непосредственно вызов функции.

    Input:

    function("QWE", 1.3456, 7)
    Output:

    (7, 'QWE')
  5. EJudge: MoreViews 'По-всякому'

    Написать генератор по имени generator(), которому передаётся параметр — целое число (возможно, отрицательное!), а он возвращает по очереди три значения: это число с обратным знаком, это число, преобразованное в строку и количество десятков в этом числе. Напоминаю, что вывод в этом примере — это результаты трёх последовательных вызовов generator(12345)

    Input:

    12345
    Output:

    -12345
    12345
    4

LecturesCMC/PythonIntro2018/02_Functions (последним исправлял пользователь FrBrGeorge 2018-09-28 17:36:14)