…·····print('Splendid!')
… else:
…·····print('That was unexpected.')
…
Splendid!
Только что вы сделали большой шаг. Комбинация функций с проверками вроде if и циклами вроде while позволяет вам делать ранее недоступные вещи.
Теперь пришло время поместить что-нибудь в эти скобки. Определим функцию echo(), имеющую один параметр anything. Она использует оператор return, чтобы отправить значение anything вызывающей стороне дважды, разделив их пробелом:
>>> def echo(anything):
…····return anything + ' ' + anything
…
>>>
Теперь вызовем функцию echo(), передав ей строку 'Rumplestiltskin':
>>> echo('Rumplestiltskin')
'Rumplestiltskin Rumplestiltskin'
Значения, которые вы передаете в функцию при вызове, называются
Эти примеры функций довольно просты. Напишем функцию, которая принимает аргумент и что-то с ним делает. Мы адаптируем предыдущий фрагмент кода, который комментировал цвета. Назовем его 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:
>>> def is_none(thing):
…·····if thing is None:
…·········print("It's None")
…·····elif thing:
…·········print("It's True")
…·····else:
…·········print("It's False")
…
Теперь выполним несколько проверок:
>>> is_none(None)
It's None
>>> is_none(True)
It's True
>>> is_none(False)
It's False
>>> is_none(0)
It's False
>>> is_none(0.0)
It's False
>>> is_none(())
It's False
>>> is_none([])
It's False
>>> is_none({})
It's False