- •§0.1. Базовые знания
- •§0.2. Где достать интерпретатор языка Питон?
- •§0.3. Установка интерпретатора языка Питон в unix
- •§0.3.1. Установка/обновление Питона из грт-пакета
- •§0.3.2. Установка Питона из исходного кода
- •§0.4. Установка Питона в ос Windows
- •§0.5. Запуск программ, написанных на Питоне
- •§0.6. Среда разработки
- •§1.1. Алгоритмы и программы
- •§1.2. Языки программирования и уровни абстракции
- •Глава 1. Базовые понятия
- •§1.3. Формальные и естественные языки
- •§1.4. Интерпретаторы и компиляторы
- •§1.5. Первая программа
- •§1.6. Что такое отладка?
- •§1.6.1. Синтаксические ошибки (syntax errors)
- •§1.6.2. Ошибки выполнения (runtime errors)
- •§1.6.3. Семантические ошибки (semantic errors)
- •§1.6.4. Процесс отладки
- •Глава 2. Переменные, операции и выражения
- •§2.1. Значения и типы
- •§2.2. Преобразование типов
- •§2.3. Переменные
- •§2.4. Имена переменных и ключевые слова
- •§2.5. Выражения
- •§2.6. Выполнение выражений
- •§2.7. Операторы и операнды
- •§2.8. Порядок операций
- •§2.9. Простейшие операции над строками
- •§2.10. Композиция
- •Глава 3. Функции §3.1. Подпрограммы
- •§3.2. Вызовы функций
- •§3.3. Справочная система
- •§3.4. Импорт модулей и математические функции
- •§3.5. Композиция
- •§3.6. Создание функций
- •§3.7. Параметры и аргументы
- •§3.8. Локальные переменные
- •§3.9. Поток выполнения
- •§3.10. Стековые диаграммы
- •§3.11. Функции, возвращающие результат
- •Глава 4. Компьютерная графика
- •Глава 5. Логические выражения, условия и рекурсия §5.1. Комментарии в программах
- •§5.2. Простые логические выражения и логический тип данных
- •§5.3. Логические операторы
- •§5.4. Выполнение по условию и «пустота»
- •§5.5. Ввод данных с клавиатуры
- •§5.6. Альтернативные ветки программы (Chained conditionals)
- •§5.7. Пустые блоки
- •§5.8. Вложенные условные операторы (Nested conditionals)
- •§5.9. Рекурсия
- •§5.10. Стековые диаграммы рекурсивных вызовов
- •§5.11. Максимальная глубина рекурсии
- •§5.12. Числа Фибоначчи
- •Глава 6. Циклы
- •§6.1. Оператор цикла while
- •§6.2. Счетчики
- •§6.3. Бесконечные циклы
- •§6.4. Альтернативная ветка цикла while
- •§6.5. Табулирование функций
- •§6.6. Специальные и экранируемые символы
- •§6.7. Числа Фибоначчи и оператор цикла while
- •§6.8. Вложенные операторы цикла и двумерные таблицы
- •§6.9. Классификация операторов цикла
- •§6.10. Управляющие структуры
- •Глава 7. Строки
- •§7.1. Оператор индексирования
- •§7.2. Длина строки и отрицательные индексы
- •§7.3. Перебор и цикл for
- •§7.4. Срезы строк
- •§7.5. Сравнение строк
- •§7.6. Строки нельзя изменить
- •§7.7. Функция find
- •§7.8. Циклы и счётчики
- •§7.9. Модуль string
- •§7.10. Классификация символов
- •§10.2. Операции над словарями
- •§10.3. Методы словарей
- •§10.4. Использование псевдонимов и копирование
- •§10.5. Разряженные матрицы
- •§10.6. Подсказки
- •§10.7. Тип «длинное целое число»
- •§10.8. Подсчет букв
Глава 3. Функции §3.1. Подпрограммы
Еще во времена адресного программирования было замечено, что некоторые части программы можно использовать более одного раза, если изменить значение какого-то параметра. Например, в программе может несколько раз вычисляться значение по определенной формуле, но каждый раз значения, подставляемые в формулу, меняются. Программисты стали обобщать решения небольших повторяющихся подзадач и обращаться к частям программы с этими решениями там, где это было нужно. Программы перестали быть линейными, поэтому стали напоминать пачку макарон, т.к. состояли из цепочек инструкций, а переключение между ними осуществлялось с помощью команд условных или безусловных переходов и меток, определяющих начало каждой «макаронины».
1 1^
В какой-то мере, это заметно усложняло процесс отладки и расширения функциональности программ, но, с другой стороны, открывало перед программистами новые возможности: во-первых, программы стали занимать меньше места, и в них стало легче ориентироваться; во-вторых, исправлять ошибки стало намного проще, т.к. программистам теперь не нужно было искать все повторяющиеся с незначительным изменениями части кода, чтобы исправить ошибку найденную в одной из них - достаточно исправить этот недочет всего в одном месте.
Идея повторного использования кода очень важна в программировании, т.к. без нее поддержка и развитие современных программных продуктов с учетом их сложности представляет собой почти неразрешимую задачу. По крайней мере, стоимость владения программами была бы без нее намного выше, и их использование стало бы в большинстве случаев нерентабельным.
В структурных языках программирования концепция повторного использования кода реализована несколькими различными способами. Один из них - написание подпрограмм. Подпрограммы представляют такой же набор инструкций, как и сама программа, но они решают менее сложные задачи. Подпрограммы могут получать на входе некоторый набор параметров и возвращать какое-то значение на выходе.
В языке Pascal подпрограммы бывают двух типов: процедуры и функции. В Питоне же, так же как и в C++, подпрограммы реализованы в более общем виде, поэтому такого разделения нет - в этих языках есть только функции.
Иногда подпрограммы группируются в так называемые модули - специальные файлы, в которых хранится описание этих функций, которые можно подключать и использовать в любой части проекта или даже в других проектах. О том как создавать и подключать модули в Питоне подробно рассказано в Приложении В. Но пока приступим к освоению функций.
34
Ревизия: 170
Функции
§3.2. Вызовы функций
С вызовами функций мы уже сталкивались, когда выполняли определение и преобразование типов значений и переменных:
>» |
type |
("Hello |
wor |
Id!") |
||
<type 's |
tr'> |
|
|
|||
>» |
int ( |
"32") |
|
|
||
32 |
|
|
|
|
||
Функция, определяющая тип значения или переменной, называется type (); преобразуемое значение или переменная должны следовать после названия функции в скобках - его называют аргументом функции. Как видно из примера, вызов функции int () осуществляется аналогичным образом.
Таким образом, для вызова функции достаточно набрать ее имя и в скобках перечислить параметры, а если передавать параметры не требуется, то в скобках можно ничего не писать. Например, в функции str () первый параметр является необязательным, т.е. его можно не указывать:
>» str ()
