代码之家  ›  专栏  ›  技术社区  ›  FacundoGFlores

发现类似代码的改进代码

  •  0
  • FacundoGFlores  · 技术社区  · 8 年前

    我将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 重复。如何改变它?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jean-François Fabre    8 年前

    只需提取参数并创建一个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)
    

    注意:分解代码时要小心,您可以引入bug(并使代码更具可读性:)。

    另外:该helper方法强制传递许多局部变量。也许创建一个对象和成员变量会更简单。

    在这种情况下,为了关闭审查工具而这样做似乎有点“过分”。