Различия между версиями 1 и 2
Версия 1 от 2018-09-28 16:10:06
Размер: 2380
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2018-09-28 17:01:35
Размер: 4561
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 25: Строка 25:
  * `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()`
 * [[http://ejudge.cs.msu.ru/new-client?contest_id=113|Ejudge]] (113-й турнир)
  * проверка — ввод тестовых входных данных и сопоставление вывода с шаблоном
   * ⇒ вывод только того, что запрошено, никаких подсказок в `input()` и объяснительных текстов
  * Типы задач:
   1. Написать программу: вводит и выводит
   1. Написать функцию (или генератор, или несколько в одном файле): входной тест — это программа, использующая функцию, выходной — текст
    * Никаких операторов ''вне'' функций, только сами функции
   1. Написать класс: входной тест — это программа, использующая класс, выходной — текст
 * '''Важно''': о «парковке на слух»

== Д/З ==
 1. <<EJCMC(113, HelloWorld, Hello World)>>

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

Функции

  • Функция 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. EJudge: HelloWorld 'Hello World'

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

    Input:

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

    Hello, world

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