Когда следует использовать функции? - PullRequest
0 голосов
/ 13 июня 2018

Я хотел бы знать, когда следует использовать функции, потому что я вижу много парней, создающих функции для продолжения кода вместо анализа аргументов и возврата результата.

Я имею в виду такие функции:

def foo():
   print("How are you?")

print("Hi.")
foo()

(Этот код не имеет смысла и непрактичен. Это всего лишь пример.)

Почему мы должны вообще использовать функции вместо того, чтобы просто иметь код в одном непрерывном месте?

1 Ответ

0 голосов
/ 13 июня 2018

Что легче читать и поддерживать?

Версия 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)]
...