внутри функций. В предыдущем примере функции echo() передавалась строка 'Rumplestiltskin'. Это значение копировалось внутри функции echo() в параметр anything, а затем возвращалось (в этом случае оно удваивалось и разделялось пробелом) вызывающей стороне.
Эти примеры функций довольно просты. Напишем функцию, которая принимает аргумент и что-то с ним делает. Мы адаптируем предыдущий фрагмент кода, который комментировал цвета. Назовем его commentary и сделаем так, чтобы он принимал в качестве аргумента строку color. Сделаем так, чтобы он возвращал описание строки вызывающей стороне, которая может решить, что с ним делать дальше:
>>>> def commentary(color):
>…·····if color == 'red':
>…·········return "It's a tomato."
>…·····elif color == "green":
>…·········return "It's a green pepper."
>…·····elif color == 'bee purple':
>…·········return "I don't know what it is, but only bees can see it."
>…·····else:
>…·········return "I've never heard of the color "··+ color +··"."
>…
>>>>
Вызовем функцию commentary(), передав ей в качестве аргумента строку 'blue'.
>>>> comment = commentary('blue')
Функция сделает следующее:
• присвоит значение 'blue' параметру функции color;
• пройдет по логической цепочке if-elif-else;
• вернет строку;
• присвоит строку переменной comment.
Что мы получим в результате?
>>>> print(comment)
>I've never heard of the color blue.
Функция может принимать любое количество аргументов (включая нуль) любого типа. Она может возвращать любое количество результатов (также включая нуль) любого типа. Если функция не вызывает return явно, вызывающая сторона получит результат None.
>>>> print(do_nothing())
>None
None может быть полезным
None — это специальное значение в Python, которое заполняет собой пустое место, если функция ничего не возвращает. Оно не является булевым значением False, несмотря на то что похоже на него при проверке булевой переменной. Рассмотрим пример:
>>>> thing = None
>>>> if thing:
>…·····print("It's some thing")
>… else:
>…·····print("It's no thing")
>…
>It's no thing
Для того чтобы понять важность отличия None от булева значения False, используйте оператор is:
>>>> if thing is None:
>…·····print("It's nothing")
>… else:
>…·····print("It's something")
>…
>It's nothing
Разница кажется небольшой, однако она важна в Python. None потребуется вам, чтобы отличить отсутствующее значение от пустого. Помните, что целочисленные нули, нули с плавающей точкой, пустые строки (''), списки ([]), кортежи ((,)), словари ({}) и множества (set()) все равны False, но не равны None.
Напишем небольшую функцию, которая выводит на экран проверку на равенство None: