Итак, мы определяем функцию обработки телефонного номера. Функция называется phone_adaptation, входной параметр у нее — это phone_number, и нужно прописать инструкции. Давайте подумаем, как мы это будем делать. Мы же с вами уже писали программу, которая делала все, что нам нужно, но не в функции. На самом деле, инструкции будут ровно те же, которые были в программе, разве что, первая строка с вводом телефонного номера нам не потребуется, потому что мы этот телефонный номер будем передавать как входной параметр. Поэтому копируем все, кроме первой строчки, и добавляем это в определение функции. Но тут важно, чтобы был нужный отступ, если мы это все выделим и нажмем так, то все отступы будут правильные. Собственно, для начала функцию можно запустить уже даже в таком виде. Давайте мы ее запустим. И, как нам кажется, ничего не произошло. Могу прямо еще раз нажать "Run" — ничего не произошло. Но это неправда, на самом деле произошло: сохранилась информация для компьютера, компьютер теперь знает, что когда он увидит где-то в коде текст вот такой, встретит функцию phone_adaptation, он будет знать, что нужно выполнять вот эти инструкции применительно к входному параметру number. Давайте попробуем вызвать эту функцию. Применим ее к какой-нибудь строке, которая называется phone_number. Давайте я буду копировать, чтобы было чуть-чуть быстрее: phone_number. Что может быть в этой строке? Какой-то телефонный номер. Чтобы вызвать функцию, мы должны написать "функция phone_adaptation" (копировать и вставлять очень удобно), скопировали. К чему мы применяем? К переменной phone_number. Запустим. Вот, нашу переменную преобразовали в правильный телефонный номер, где все буквы заменены на цифры. При этом получилось, что у нас здесь phone_number и в определении функции в качестве параметра тоже была указана переменная именно с таким именем. Это совершенно необязательно. Может быть, у нас какая-то другая будет переменная, например, номер телефона отправителя, и мы его можем также прописать, а можем его просто ввести с клавиатуры. И будем применять функцию phone_adaptation уже вот к этой переменной — к phone_number_sender (к номеру телефона отправителя). Давайте напишем, и он потребует, чтобы мы ввели этот номер телефона. Давайте чуть-чуть он будет другой, но тоже, чтобы использовались только цифры два и три, чтобы мы могли обработать этот номер. Это мы ввели, и вот он обработался, несмотря на то, что номер телефона здесь имеет уже другую переменную. Почему так можно делать? Потому что функция работает со своими локальными переменными, которые внутри функции. Может быть, они совпадают с теми переменными, которые у нас вне этой функции, может быть, нет — это совершенно неважно. Она смотрит только на свои переменные, и когда мы вызываем функцию применительно к нашей какой-то переменной, просто строка, которая содержится в этой переменной, копируется в параметры функции. Просто копируется. Мы даже могли бы здесь вызывать функцию не к конкретной переменной, а просто к строке, применять функцию к строке. Смотрите, напишем "phone_adaptation" вот к этой строке, давайте только сейчас комментарии поставим в том порядке, как у нас происходит: сначала мы применили функцию к строке phone_number, потом мы применили функцию к строке phone_number_sender, а теперь будем применять ее просто к строке с номером телефона. Давайте, для разнообразия, пусть здесь будет другой номер телефона. Посмотрим, что все три варианта сработают. Первый сработает сам, вот уже получилось у него. А во второй мы должны ввести какой-то номер телефона (давайте заглавными буквами пока что), и третий вариант тоже сработал. Всегда указанная строка или строка, которая хранится в указанной переменной, в нашем случае будет копироваться в функцию. Еще важный момент: в данном случае, когда мы уже вызываем функцию — то, что мы в нее передаем, называется аргументом. Почему так? Когда мы работаем и определяем только функции, мы указываем ее входные параметры, то есть в определении функции (давайте мы его найдем, где у нас было определение функции) здесь phone_number — это входной параметр. Мы пока не знаем, чему он будет равен, мы работаем с ним, не зная его конкретного значения, и тогда он называется параметр функции. А когда мы, пусть даже с тем же самым именем, переменную phone_number передаем в функцию — это уже аргумент. Мы уже его знаем, мы его только что определили. Когда мы знаем и вызываем функцию к этому (в данном случае к этой строке) — эта строка является аргументом функции. А в момент, когда мы только функцию определяли, та строка, с которой мы будем работать, но которую мы, на самом деле, ее конкретное значение еще не знаем, называется параметром.