Главная страница

День 5 конспект. Это фрагмент программного кода, который решает какуюлибо задачу


Скачать 310.75 Kb.
НазваниеЭто фрагмент программного кода, который решает какуюлибо задачу
Дата25.10.2021
Размер310.75 Kb.
Формат файлаdocx
Имя файлаДень 5 конспект.docx
ТипЗакон
#255307

Функция — это фрагмент программного кода, который решает какую-либо задачу.

Его можно вызывать в любом месте основной программы. Функции помогают избегать дублирования кода при многократном его использовании.

Функции полезны при написании простых программ, а при создании программ более сложных, таких как компьютерные игры, функции просто необходимы — конечно, если вы планируете закончить программу быстрее, чем за сто лет.

Для определения функции нужно всего лишь написать ключевое слово def перед ее именем, а после — поставить двоеточие. Следом идет блок инструкций.

Имя этой функции — testfunc. У нее есть единственный аргумент — myname, а ее тело — это блок кода, идущий сразу после строки, которая начинается с def (сокращение от defi ne — определить). Аргумент — это специальная переменная, которая существует, только пока функция выполняется.

Функцию testfunc можно запустить (или, как говорят программисты, вызвать), указав ее имя, а после него, в скобках, значение аргумента:



Также можно создать функцию, которая принимает не один, а два,

три или иное количество аргументов (либо, напротив, не принимает аргументы). Например, вот функция testfunc с двумя аргументами:



В качестве аргументов можно указывать переменные (которые перед этим нужно создать):





Зачастую из функции полезно вернуть какое-то значение. Это делается с помощью команды return. Например, представьте такую функцию для расчета сбережений:

Эта функция принимает три аргумента. Вычисляя результат, она

складывает первые два аргумента — pocket_money и paper_route, —

а затем вычитает из полученного значения третий аргумент — spending.

Команда return возвращает результат вычислений в ту часть кода, откуда функция была вызвана, и его можно сохранить в переменной (обычным способом, с помощью знака "=") либо вывести на экран:



Переменные, созданные в теле функции, нельзя использовать после того, как эта функция завершит работу, поскольку они существуют только во время ее выполнения. В таких случаях программисты говорят, что область видимости переменных ограничена функцией.

Рассмотрим простую функцию, которая использует внутренние переменные, но не принимает аргументы:

Здесь в строке 1 мы создали функцию с именем variable_test, которая в строке 2 перемножает переменные first_variable и second_variable и возвращает результат.

Вызвав эту функцию с помощью print, мы получили результат: 200.

Однако, если попытаться за пределами функции вывести на экран значение first_variable (или second_variable), Python выдаст сообщение об ошибке.

У переменных, созданных вне тела функции, область видимости дру-

гая. Например, давайте создадим перед определением нашей функции

переменную, а затем используем ее в теле функции:

Хотя переменные first_variable и second_variable вне тела функции недоступны, переменную another_variable (созданную за пределами функции — в строке 1) можно использовать и в теле функции — в строке 2.

Вот что получится при вызове этой функции:



Функции были созданы ради возможности их многократного применения. Код без функций превратился бы в огромное нечитаемое полотно, на порядки превышающее по длине аналогичную программу с их использованием.

Разбитие больших и сложных процессов на простые составляющие — важная часть, как кодинга, так и реальной жизни. В повседневности мы занимаемся этим неосознанно. Когда убираемся в квартире, мы пылесосим, моем полы и окна, очищаем поверхности от пыли и наводим блеск на всё блестящее. Всё это — составляющие одного большого процесса под названием "уборка", но каждую из них также можно разбить на более простые подпроцессы.

В программировании модульность строится на использовании функций. Для каждой подзадачи — своя функция. Такая компоновка в разы улучшает читабельность кода и уменьшает сложность его дальнейшей поддержки.

Допустим, мы работаем с базой данных. Нам нужна программа, которая считывает значения из базы, обрабатывает их, выводит результат на экран, а затем записывает его обратно в базу.

Без применения модульности получится сплошная последовательность инструкций:

Но если вынести каждую операцию в отдельную функцию, то текст главной программы получится маленьким и аккуратным.,

Практика

Простой пример: Вы торгуете мёдом, и после каждой продажи вам нужно печатать чек. В нём должно быть указано: название фирмы, дата продажи, список наименований проданных товаров, их количество, цены, общая сумма, а также сакраментальная фраза "Спасибо за покупку!".

Если не пользоваться функциями, всё придётся прописывать вручную. В простейшем случае программа будет выглядеть так:



А теперь представьте, что произойдёт, когда вы раскрутитесь, и покупатели станут приходить один за другим. В таком случае, чеки надо будет выдавать очень быстро. Но что делать, если вдруг нагрянет ваш любимый клиент и купит 10 сортов мёда в разных количествах? Далеко не все в очереди согласятся ждать, пока вы посчитаете общую сумму и внесёте её в чек.

Хорошо, что данный процесс можно легко оптимизировать с использованием функций.



Встаёт резонный вопрос: где же обещанное упрощение и куда подевались товары? Как раз для этого, мы и будем описывать состав покупки не напрямую в функции, а в отдельном списке кортежей. Каждый кортеж состоит из трёх элементов: название товара, количество и цена.



Теперь этот список передадим в функцию как аргумент, и самостоятельно считать больше не придётся.

print_check(honey_positions)

Да, код стал более массивным. Однако теперь для печати чека вам не придётся самостоятельно вычислять итог. Достаточно лишь изменить количество и цену товаров в списке. Существенная экономия времени! Слава функциям!

Теперь представьте, что вы строите звездолет из экономичных материалов, например банок из-под газировки. Вы планируете сооружать его постепенно, расплющивая по 2 банки в неделю, а всего потребуется около 500 банок.

Мы можем написать функцию для расчета времени, которое понадобится, чтобы расплющить 500 банок, если считать, что в неделю вы справляетесь с двумя. Пусть наша функция выводит общее количество расплющенных банок для каждой недели от начала строительства звездолета в течение года. Количество банок в неделю мы будем передавать в аргументе:



В первой строке этой функции мы создаем переменную total_cans, присваивая ей значение 0. Затем мы делаем цикл по неделям в году, на каждом шаге прибавляя к total_cans количество банок, расплющенных за неделю. Весь этот блок кода и есть тело нашей функции. При этом в функции есть еще один блок, находящийся внутри первого: это две последние строки кода, составляющие тело цикла for.

Введем код этой функции в окне оболочки и попробуем вызывать ее с разными значениями аргумента (для разного количества расплющенных банок в неделю):



написать администратору сайта