Что легче читать и поддерживать?
Версия 1:
db = init_database()
connect_to_database(db)
target = 'funny_cats'
cats = db.fetch(target)
Версия 2:
5000 lines of code resembling the bodies of the above function calls
Что легче читать и поддерживать?
Версия 1:
for user in lots_of_users:
if not polite(user):
ban(user)
Версия 2:
for user in lots_of_users:
30 lines of code for body of polite
30 lines of code for body of ban
Предположим, что вы хотите выполнить один и тот же фрагмент кода в разных местах вашей программы.
some_function()
[100 lines]
some_function()
[100 lines]
[conditional branch possibly calling some_function()]
С помощью функции вы просто вызываете эту функцию в нужных местах.Без функции вам нужно копировать код везде.Когда вы захотите изменить поведение этих блоков кода, вам придется искать все места, где вы реплицировали код, а не просто настраивать одну функцию.Если вы пропустите одну локацию, вы внесете ошибку.
Функции - это объекты первого класса в Python, что является фальшивым разговором о том, что они ведут себя так же, как и любой другой более тривиальный объект - вы можете поставитьих можно использовать в списках или использовать в качестве аргументов для других функций.
Это позволяет просматривать функции в виде отдельных фрагментов кода, которые могут динамически выполняться другими фрагментами кода, например, путем передачи критерия сортировки ввстроенная функция sorted
.
>>> def criterion(sequence):
... return sequence[-1]
...
>>> list_of_sequences = [(1, 2), (5, -1), (2, 10)]
>>>
>>> sorted(list_of_sequences, key=criterion)
[(5, -1), (1, 2), (2, 10)]