На этом шаге мы поговрим о возврате пустого значения из функции.
В конец любой функции Python добавляет неявную инструкцию return None. По этой причине, если в функции не указано возвращаемое значение, по умолчанию она возвращает None.
Это означает, что инструкции return None можно заменять на пустые инструкции return или даже пропускать их полностью и по-прежнему получать тот же самый результат:
>>> def foo1(value): if value: return value else: return None >>> def foo2(value): """Пустая инструкция return подразумевает `return None`""" if value: return value else: return >>> def foo3(value): """Пропущенная инструкция return подразумевает `return None`""" if value: return value
Все три функции правильно возвращают None, если передать им в качестве единственного аргумента фиктивное значение:
>>> type(foo1(0)) <class 'NoneType'> >>> type(foo2(0)) <class 'NoneType'> >>> type(foo3(0)) <class 'NoneType'>
Итак, когда же лучше всего использовать это функциональное средство языка Python в своем собственном программном коде?
Предлагаемое эмпирическое правило заключается в следующем: если функция не имеет возвращаемого значения (в других языках такая функция называется процедурой), то можно исключить инструкцию return. Добавлять эту инструкцию было бы лишним и вносило бы путаницу. Примером процедуры является встроенная в Python функция печати print(), которая вызывается только ради ее побочных эффектов (распечатки текста) и никогда - ради ее возвращаемого значения.
Давайте возьмем функцию, например встроенную в Python функцию sum(). Она, безусловно, имеет логическое возвращаемое значение, и, как правило, функция sum() не вызывается только ради ее побочных эффектов. Ее цель состоит в том, чтобы подсчитать сумму последовательности чисел и затем представить результат. Итак, если с логической точки зрения функция действительно имеет возвращаемое значение, то необходимо решить, использовать неявную инструкцию return или нет.
С одной стороны, вы можете утверждать, что исключение явной инструкции return None делает программный код более сжатым и, следовательно, более легким для чтения и понимания. Субъективно вы отметили бы, что это делает программный код "симпатичнее".
С другой стороны, некоторые программисты могут удивиться, что Python ведет себя таким образом. В том, что касается написания чистого и удобного в сопровождении программного кода, такое непредсказуемое поведение редко является хорошим признаком.
На следующем шаге мы сформулируем краткие выводы по изученному материалу.