Основы функций. 1 часть
Limera1n
Для начала давайте зададим себе, казалось бы, странный вопрос - зачем вообще нужны функции? Функции нужны для того, чтобы не повторять один и тот же код постоянно. Это одна из причин, так называемое reusability или переиспользование. То есть один раз, когда мы написали какой то функционал, какой то алгоритм расчета и он нам требуется в различных частях программы мы же не будем его постоянно переписывать. Это нерационально, это приведет к замусориванию кода и в таких случаях мы, функционал, которые используем в разных местах, записываем в виде функции, а затем просто используем эту функцию.
Давайте посмотрим на то, как ими пользоваться.
Первое ключевое слово это def, от слова define, то есть определить:

После def идет название функции, в конце названия обязательно нужно ставить (), чтобы ее определить, затем двоеточие. В этой функции будет блок с выводом слова Hello!. Вызываем мы функцию просто записав ее со скобками. Если мы вызовем функцию без скобок, то получим описание, что это у нас функция, которая существует как main скрипт, который сейчас исполняется.
Так же относительно функции можно вызвать функцию help().

help у нас не выдает ничего, так как он отсутствует для данной функции, но мы можем его прописать с помощью так называемых docstring, используя тройные кавычки, как показано в примере. В первой строчке прописывается информация о функции, во второй какие входные данные передаются в функцию, в данном случае никаких, а в третьей, что она возвращает. Синтаксис должен быть именно таким. И после исполнения help в данном случае мы получаем всю информацию, что мы записали.
Функция может принимать аргументы. Для этого после определения функции мы задаем аргументы внутри круглых скобочек:

Мы вызываем функцию print_name, передаем ей имя и на выводе получаем это имя. Если мы попробуем ничего не передавать функции, то получим ошибку, которая говорит о том, что функция требует передачи аргумента именованного name, но никто его не передал.
У аргумента может быть значение по умолчанию. Когда мы определяем функцию, мы можем определить эти значения по умолчанию для аргументов. Это делается тогда, когда мы хотим дать возможность коду, который вызывает нашу функцию, как передавать аргументы, так и не передавать.

Это делается таким вот синтаксисом ='Любой текст, который вы хотите, чтобы был выведен', то есть, если мы вызываем вот такую функцию ничего не передав в качестве аргумента, то получаем ответ Default, либо то, что вы сами туда напишете.
У функции так же есть возвращаемый тип. Вот print_name ничего не возвращает, она просто печатает имя. Функции, которые ничего не модифицируют, ничего не выбрасывают во внешний мир, условно на консоль, они являются так называемыми чистыми функциями или pure functions. Они просто возвращают некое значение.
Если мы посмотрим на тип функции print_name, которая нам возвращает, мы увидим, что она ничего не возвращает:

Тут мы получаем, что результат у нас None, то есть ничего не возвращает функция, и соответственно класс NoneType.
Чтобы чтото вернуть из функции мы можем воспользоваться ключевым словом return:

Мы определили другую функцию. Используем return и добавляем аргумент name. Далее создаем переменную, в которой будет определение аргумента этой функции. Выводим, и получаем возврат, который мы и хотели.
Так же мы можем работать с разными типами, например что-нибудь просуммировать:

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

is_adult у нас больше 18, получаем True, а если был бы меньше 18, то вывод был бы False.
Можно написать еще одну функцию, которая будет проверять на палиндром.
Палиндром - слово или словосочетание, которое можно прочитать задом наперед и получится то же самое, если мы прочитаем его, как обычно. Например - а роза упала на лапу Азора.

Мы сделали реверс строки с помощью такого синтаксиса [::-1], развернули с помощью среза. В первом выводе мы получили True, потому что aabaa читается и задом наперед так же, как если бы мы прочитали его слева на право. Во втором выводе у нас False, потому что aabba не читается так же наоборот, а читается как abbaa.
С первой частью закончили.