[МУЗЫКА] [МУЗЫКА] Сегодня мы научимся создавать и пользоваться своими функциями на языке Python. Что такое функция, вы уже знаете, вы использовали стандартные и даже библиотечные функции, поэтому в основном мы сегодня поговорим про создание своих функций. Итак, для чего предназначены функции? Они предназначены, в первую очередь, для того, чтобы какие-то повторяющиеся действия вынести, отдельно оформить и работать с ними с различными параметрами. Простой жизненный пример — вы утром и вечером чистите зубы, при этом это довольно сложная операция: это нужно взять щетку, взять пасту и совершить еще много других действий. Но у вас они отработаны до автоматизма и называются одним словом — почистить зубы. Особенность человеческого мышления состоит в том, что человек не может осмыслить сразу огромную задачу, и нужно провести ее декомпозицию. То есть разбить на какие-то меньшие задачи и каждую из них уже отдельно легко решить, и потом из этих маленьких кирпичиков составить собственно решение глобальной какой-то проблемы, например, почистить зубы. Итак, поэтому первое, для чего это нужно, это для повторяющихся действий с различными параметрами. Кроме того, функции могут использоваться и для разбиения какого-то сложного процесса на логичные блоки, даже если они используются всего один раз. То есть перед вами стоит огромная задача какая-то, что вы можете сделать? Вы можете разбить ее на несколько более простых задач, каждую из них назвать логичным названием, понять, что нужно для решения этой задачи, какие входные данные, и что она должна вернуть в качестве ответа на свою подзадачу. То есть придумать входные параметры для функции и формат выходных данных, то есть что ваша функция должна возвращать. При реализации функции нужно стараться придерживаться такого принципа. Во-первых, какая-то законченная подзадача, то есть у нее есть вполне понятная область применения. В принципе, для большинства функций решение этой подзадачи, может, потребуется и в решении других каких-то задач. Второе — логичное название, чтобы вы увидели в тексте программы название функции и сразу поняли, что она делает. И вы понимаете, как она работает, не лезете ни в какие дебри и можете осмыслить происходящее целиком. И наконец, третье, просто для удобства — функция должна укладываться в один экран. Вот такое небольшое ограничение на ее длину. Если она получается слишком длинной, ее нужно нарезать еще на какие-то логичные кусочки. Функция не должна быть слишком короткой, то есть там фактически не должно выполняться одно-два действия, их лучше написать в программе, если они понятны. Конечно, иногда бывают исключения из этого, если там, например, какая-то сложная арифметика происходит, у которой, тем не менее, есть смысл, то можно оформить ее даже в виде однострочной какой-то функции с нормальным человеческим названием. Слишком длинную функцию неудобно листать между экранами, потому что просто теряется понимание, что же там делалось в начале, когда вы дочитали уже до конца функции. То есть, вообще говоря, оптимальный размер для функции — это примерно 10–15 строк. Не надо писать сильно короче, не надо писать сильно длиннее. Либо вам придется прыгать по коду, чтобы понять происходящее, если они будут слишком короткие, либо вы будете забывать, что было в начале функции, если они слишком длинные. В отличие от математических функций, функции на языке Python не обязательно возвращают значения. Они могут просто делать какое-то действие. Например, функция Print стандартная. Она ничего не возвращает, но совершает действие — печатает на экран. Также функции могут не принимать параметров. Например, известная нам функция input для чтения, которая никаких параметров не принимает, но значения возвращает — то, что пользователь ввел, например, с клавиатуры. Посмотрим, как создаются функции. Итак, если мы хотим создать свою функцию для каких-то своих полезных действий, использовать ее в будущем, то мы должны написать слово def — сокращение от define, «определить». Затем название функции и сразу после названия в круглых скобках параметры через запятую. Наша функция демонстрирует подсчет гипотенузы. У нас есть два катета, мы считаем корень квадратный из суммы квадратов длин наших катетов. Это просто теорема Пифагора. Конечно, есть такая стандартная функция, допустим, мы не знали о ее существовании и решили написать сами. Итак, def, название, в круглых скобках параметры. На место параметров подставляется то, с какими параметрами функция была вызвана. Вы хотите, например, чтобы пользователь что-то ввел с клавиатуры, сохраняете это в какие-то переменные и вызываете вашу функцию, подставляя те имена переменных, которые вы завели. Они, естественно, могут отличаться от использованных у нас a и b, просто на место переменной a подставится первое число, на место переменной b подставится второе число. Для возврата значения функции используется команда return. Вы пишете return, а затем какое-то выражение, которое подсчитывается, и функция возвращает его. По сути, просто результат вычисления этого выражения подставляется на то место, где у вас была вызвана эта функция — в основной программе или в какой-то другой функции. Определять функции нужно до их первого использования. То есть, если вы хотите воспользоваться функцией, вызвать ее — для этого достаточно написать просто имя функции и в скобках указать параметры, то функция к этому моменту должна быть определена — написана выше в коде. При этом определять функции можно в Python в любом месте. То есть вы можете писать, писать программу, затем определить функцию и дальше писать основную программу. То, что относится к функции, опять же, выделяется отступом. Но, тем не менее, это не всегда, прямо скажем, в большинстве случаев, не очень хорошо, когда вы писали какой-то код, потом функция, потом опять код. И разумно выделить какое-то место в начале программы, где вы будете определять функции, и только после того, как все определили, уже будете писать основной код программы. Собственно, так делается во многих других языках программирования и хорошо себя зарекомендовало. И наверное, стоит придерживаться такого стиля, кроме каких-то исключительных ситуаций, что вам прямо сейчас понадобилась функция, вы ее определили и дальше что-то делать. Возможно, если это одноразовый код, который вы запустили и забыли, такой способ окажется лучше, но если вы планируете читать его или давать читать другим людям или исправлять, то, конечно, лучше навести в своем коде порядок. Сейчас мы посмотрим на практике, как пользоваться, задавать функции, как заходить в них в отладке. И я надеюсь, вы научитесь и будете писать их в соответствии со всеми рекомендациями. [МУЗЫКА] [МУЗЫКА]