2016-09-21 3 views
0

내가 내 코드에 codeclimate을 통과 발견, 내가 얻은 다음향상 코드는

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 = [] 
:

1 개 위치에서 발견

유사 코드는

이 내 코드입니다

iterable_item_addedvalues_changed을 반복한다. 그것을 바꾸는 방법?

+0

나머지 '...'코드는 보지 않고 결정할 수 없습니다. 솔직히, 이것을위한 절차를 수행하는 것은 과도 할 것입니다. 복사/붙여 넣기 감지의 임계 값을 높일 수있는 방법이 있습니까? –

+2

변수를 사용 하시겠습니까? 또한'... in ddiff'를 테스트하는 대신'keys()'를 호출하는 이유는 무엇입니까? 더 간단하고 효율적입니다. – 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) 

참고 : 코드를 인수 분해 할 때 조심, 당신이 버그를 소개합니다 (코드보다 읽기 쉽게 만들 수 있습니다 :)).

또한 : 해당 도우미 메서드는 많은 로컬 변수를 전달해야합니다. 어쩌면 객체와 멤버 변수를 생성하면 훨씬 더 간단해질 것입니다.

그런 경우 검토 도구를 종료하기 위해이를 수행하는 것이 "잔인한"것으로 보입니다.