2016-09-21 59 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 = [] 

其中重复了iterable_item_addedvalues_changed。如何改变它?

+0

没有看到'''代码的其余部分,这是不可能的决定。坦率地说,为此做一个程序将是过分的。有没有办法提高复制/粘贴检测的​​阈值? –

+2

使用变量?另外,为什么你调用'keys()'而不是测试'...在ddiff'中?看起来更简单,更高效。 – 5gon12eder

+0

@ Jean-FrançoisFabre检查我的更新 – FacundoGFlores

回答

1

只是抽象的参数,并创建一个helper方法:

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) 

注:小心因式分解代码时,可以引入错误(和使代码更可读:))。

另外:该帮助方法强制传递大量的局部变量。也许创建一个对象和成员变量会更简化。

在这种情况下,为了让您的评论工具闭嘴,这似乎有点“矫枉过正”。