Функция, которая выполняет сразу несколько разных задач, часто нарушает принцип единственной ответственности (SRP - Single Responsibility Principle), делает код трудночитаемым, сложно тестируемым и неподходящим для повторного использования.


Пример 1

Если название функции содержит слово "and" или в её описание хочется добавить "а потом", то наверняка стоит её разбить. Иногда функция может делать и несколько действий, но тогда лучше подбирать для неё более общее название.

Плохо:


def download_image_and_upload_it_to_telegram(url, tg_token):
...

Хорошо:


def download_image(url):
    ...

def upload_image_to_telegram(tg_token):
    ...


Пример 2

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

Плохо:


def extract_salaries(vacancies):
    ...

def calculate_statistics(vacancies):
    salaries = extract_salaries(vacancies)
    average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
    ...

def main():
    ...
    statistics = ...
    vacancies = ...
    statistics[language] = calculate_statistics(vacancies)
    ...

Хорошо:


def extract_salaries(vacancies):
    ...

def calculate_statistics(vacancies, salaries):
    average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
    ...

def main():
    ...
    statistics = ...
    vacancies = ...
    salaries = extract_salaries(vacancies)
    statistics[language] = calculate_statistics(vacancies, salaries)
    ...