Функции и генераторы
Функции
- Функция Python3 как именованный алгоритм
- Отличие от функции в строгом смысле (преобразование данных определённого типа в данные (другого?) определённого типа)
- функция — это просто объект
правда, он callable() (но бывают и другие callable-объекты)
т. е. объект, который можно вызвать с помощью объект()
Какие callable-объекты нам уже известны (например, типы, bin(), print() и т. п.)
- Задание и вызов функции
- Формат задания функции
- Синтаксически значимый сдвиг
- Формальные и фактические параметры
- Возвращаемое значение функции
Как вернуть два значения?
- Duck typing: все объекты строго типизированы, но по имени этого не скажешь
- ⇒ функция выполнится, если все операции в ней применимы к переданным объектам
- Локальные и глобальные имена, правила видимости
globals() и locals()
- Проблема «побочного эффекта»: разрешать или не разрешать связывание с помощью глобальных имён внутри функции:
- Есть связывание ⇒ имя локальное
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() и объяснительных текстов
- Типы задач:
- Написать программу: вводит и выводит
- Написать функцию (или генератор, или несколько в одном файле): входной тест — это программа, использующая функцию, выходной — текст
Никаких операторов вне функций, только сами функции
- Названия функций должны совпадать с таковыми в домашних заданиях
- Написать класс: входной тест — это программа, использующая класс, выходной — текст
- проверка — ввод тестовых входных данных и сопоставление вывода с шаблоном
Важно: о «парковке на слух»
Д/З
Прочесть и прощёлкать третью и четвёртую главы учебника (четвёртая глава — это упражнения)
EJudge: HelloWorld 'Hello World'
Написать программу, которая выводит строку Hello, world (в точности)
(ввод не нужен)
Hello, world
EJudge: ThreeBack 'Три объекта через запятую'
Ввести три python3-объекта через запятую (с помощью eval(input())), вывести их через пробел, причём в обратном порядке
"345", 100500, -2
-2 100500 345
EJudge: ThreeFun 'Три объекта — функция'
Написать функцию по имени function() от трёх параметров, которая возвращает кортеж из двух объектов — последнего и первого. Напоминаю, что в этом случае в примере не входной текст, а непосредственно вызов функции.
function("QWE", 1.3456, 7)
(7, 'QWE')
EJudge: MoreViews 'По-всякому'
Написать генератор по имени generator(), которому передаётся параметр — целое число (возможно, отрицательное!), а он возвращает по очереди три значения: это число с обратным знаком, это число, преобразованное в строку и количество десятков в этом числе. Напоминаю, что вывод в этом примере — это результаты трёх последовательных вызовов generator(12345)
12345
-12345 12345 4