Шаг 56.
Python: тонкости программирования.
Эффективные функции. Здесь нечего возвращать

    На этом шаге мы поговрим о возврате пустого значения из функции.

    В конец любой функции 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 ведет себя таким образом. В том, что касается написания чистого и удобного в сопровождении программного кода, такое непредсказуемое поведение редко является хорошим признаком.

    На следующем шаге мы сформулируем краткие выводы по изученному материалу.




Предыдущий шаг Содержание Следующий шаг