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


Пример 1

Плохо:


from environs import Env


def get_env():
    env = Env()
    return env.read_env()


def main():
    env = get_env()
    ...

Хорошо:


from environs import Env


def main():
    env = Env()
    env.read_env()
    ...


Пример 2

Плохо:


import os


def get_filenames(directory):
    filenames = os.listdir(directory)
    return filenames


def main():
    ...
    filenames = get_filenames(directory)
    ...

Хорошо:


import os


def main():
    ...
    filenames = os.listdir(directory)
    ...


Пример 3

Плохо:


def fetch_something(callback, url, error_message):
    result = callback(url)
    if not result:
        raise SomeError(error_message)
    return result


def main():
    try:
        payload = fetch_something(get_some_payload, some_url, "Что-то пошло не так.")
    except SomeError as err:
        logger.error(err)

Хорошо:


def main():
payload = get_some_payload(some_url)
if not payload:
    logger.warning("Что-то пошло не так.")


Пример 4

Плохо:


import requests


def send_request(url):
    response = requests.get(url)
    response.raise_for_status()
    return response


def main():
    ...
    try:
        response = send_request(url)
    except requests.exceptions.HTTPError as err:
        ...

Хорошо:


import requests


def main():
    ...
    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.exceptions.HTTPError as err:
        ...