Как я могу уменьшить количество параметров в этой функции

#python #function

#python #функция

Вопрос:

Я читал Чистый код Роберта К. Мартина (дяди Боба), в котором говорится, что функции должны иметь как можно меньше параметров. В идеале ноль.

В книге предполагается, что три или более параметров — это слишком много для функции.

Сейчас я пытаюсь внедрить эту практику в свой собственный код и пытаюсь выяснить, как уменьшить количество параметров в следующей функции

 def json_return(
    status_code
    message
    data = None,
    headers = None,
):
    payload = {"status_code": status_code, "message": message}
    if data:
        payload.update({"data": data})
    response = jsonify(payload), status_code, headers
    return response
 

Это функция, используемая для генерации ответа JSON. Меня беспокоит понимание того, как структурировать эту функцию таким образом, чтобы она принимала меньше параметров.

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

Как я могу лучше организовать эту функцию, чтобы она принимала меньше аргументов? Решением может быть разделение его на несколько функций, более крупный класс или что-то еще (это не ограничивается сохранением его как одной функции).

РЕДАКТИРОВАТЬ: я знаю, что эти принципы противоречивы. Я понимаю это и все еще хочу узнать, как лучше всего реализовать их в моем коде.

Комментарии:

1. Вероятно, это лучший вопрос для codereview.stackexchange.com . Я считаю, что совет, которому вы пытаетесь следовать, ошибочен или, по крайней мере, не полезен для всех парадигм программирования. Для строгого OO-программирования удаление параметров важно; для строгого функционального программирования невозможно что-либо сделать без параметров. Вы должны использовать столько параметров, сколько необходимо для выполнения того, что вам нужно, и не более того.

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

3. «В книге предполагается, что три или более параметров слишком много для функции». кажется немного чрезмерным правилом. Большинство функций в коде, над которыми я работаю, имеют много параметров.

4. Я голосую за закрытие этого вопроса, потому что он должен быть включен codereview.stackexchange.com

5. Он написал это или java, а не для Python, потому что он не понимает Python. В python вы бы написали метод (для класса), например as_json (похожий на as_dict ), и не беспокойтесь об этом, потому что он просто работает. В отличие от Java, в Python объект похож на dict , поэтому преобразование не является проблемой и не требует дополнительного уровня с логикой преобразования.