phaggi
@phaggi
лужу, паяю, ЭВМы починяю

Как устранить дублирование кода?

Обрабатываю текст скриптом. Проверяю, если текст большой, обрабатываю чанками, иначе целиком.
if size > max_size:
    chunker = TextChunker(maxlen=max_size)
    for chunk in chunker.chunk(text):
        answer = get_answer(chunk,
                           tags_quantity=1)
        tmp_json = parse_answer(answer)
        result_json['summary_text'] += tmp_json['result']
        result_json['tags'].extend(tmp_json['tags'])
        result_json['input_size'] += answer.input_size
        result_json['output_size'] += answer.output_size
else:
    answer = get_answer(text,
                        tags_quantity=3)
    tmp_json = parse_answer(answer)
    result_json['summary_text'] = tmp_json['result']
    result_json['tags'].extend(tmp_json['tags'])
    result_json['input_size'] = answer.input_size
    result_json['output_size'] = answer.output_size
return result_json


Вроде очевидно, что делается почти одно и то же. Но как-то не могу сообразить, как это красиво вынести в отдельную функцию, чтобы не городить грязь с костылями. Прошу дать какой-нибудь образчик или ткнуть в правильную статью/книгу.
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Как вариант (>=Python3.10):
from typing import Dict, Any

def process(answer, result_json: Dict[str, Any]) -> None:
    tmp_json = parse_answer(answer)
    result_json['summary_text'] += tmp_json['result']
    result_json['tags'].extend(tmp_json['tags'])
    result_json['input_size'] += answer.input_size
    result_json['output_size'] += answer.output_size

def handler(text: str, max_size: int) -> Dict[str, Any]:
    result_json = {'summary_text': '', 'tags': [], 'input_size': 0, 'output_size': 0}

    match len(text):
        case size if size > max_size:
            chunker = TextChunker(maxlen=max_size)
            for chunk in chunker.chunk(text):
                answer = get_answer(chunk, tags_quantity=1)
                process(answer, result_json)
        case _:
            answer = get_answer(text, tags_quantity=3)
            process(answer, result_json)

    return result_json
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы