#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 , поэтому преобразование не является проблемой и не требует дополнительного уровня с логикой преобразования.