2016-09-21 5 views
0

Я передал codeclimate в мой код, и я получил следующее:Улучшение кода для подобного кода найдено

Аналогичный код найден в 1 другом месте

Это мой код:

stradd = 'iterable_item_added' 
if stradd in ddiff: 
    added = ddiff[stradd] 
    npos_added = parseRoots(added) 
    dics_added = makeAddDicts(localTable, pk, npos_added) 
else: 
    dics_added = [] 
strchanged = 'values_changed' 
if strchanged in ddiff: 
    updated = ddiff[strchanged] 
    npos_updated = parseRoots(updated) 
    dics_updated = makeUpdatedDicts(localTable, pk, npos_updated) 
else: 
    dics_updated = [] 

Где iterable_item_added и values_changed повторяются. Как его изменить?

+0

, не видя остального кода «...», решить его невозможно. Честно говоря, выполнение процедуры для этого было бы излишним. Есть ли способ повысить порог обнаружения копирования/пасты? –

+2

Использовать переменную? Кроме того, почему вы вызываете 'keys()' вместо проверки '... в ddiff'? Кажется, проще и эффективнее. – 5gon12eder

+0

@ Jean-FrançoisFabre проверить мое обновление – FacundoGFlores

ответ

1

просто абстрактные параметры и создать вспомогательный метод:

def testmethod(name,localTable,m,ddiff,pk): 
    if name in ddiff: 
     npos = parseRoots(ddiff[name]) 
     rval = m(localTable, pk, npos) 
    else: 
     rval = [] 

    return rval 

на вызов его:

dics_added = testmethod('iterable_item_added',localTable,makeAddDicts,ddiff,pk) 
dics_updated = testmethod('values_changed',localTable,makeUpdatedDicts,ddiff,pk) 

Примечание: будьте осторожны, когда факторизующим код, вы можете ввести ошибки (и сделать код более читаемым :)).

Также: этот вспомогательный метод заставляет передавать много локальных переменных. Возможно, создание объекта и переменных-членов упростит еще больше.

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

 Смежные вопросы

  • Нет связанных вопросов^_^