我一直在为其中一个项目重构整个代码库。基本上将代码模块化为单独的模块,具有单一职责的类,将意大利面条功能分解为小的方法等。
但是,我想知道我们如何干净/优雅地处理下面的代码块,如果具有条件,则该代码块具有多个条件 。想法是使其更小更干净。对于其他情况,无论何时找到多个 if-and 语句,我都会使用谓词。但是这里的情况几乎没有什么不同,因为它们针对不同的条件打印不同的日志消息。
def somefunc(*args, **kwargs):
for p_key, p_det in somedict.iteritems():
get_all_somevars(p_det)
if somevar1 and somevar2 is None:
continue
if somevar3 is None:
logger.info('some message')
continue
if somevar4 is None:
logger.info('some message')
continue
somevar5 = x.split('\n')
somevar6 = y.split('\n')
somevar7 = do_something_2(somevar5, somevar6)
if somevar7 is None:
logger.info('some message')
continue
do_something_3()
答案 0 :(得分:2)
某些质量代码检查拒绝在循环内进行多次继续(例如,超过2个)。
发生这种情况时,您可以将所有这些条件包装到一个单独的方法中,该方法将返回true / false并进行相应记录。
我不知道其他清理方法。
编辑:(伪代码)
def somefunc(*args, **kwargs):
for p_key, p_det in somedict.iteritems():
do_something_1()
if should_skip_that_loop(args)
continue
somevar5 = x.split('\n')
somevar6 = y.split('\n')
somevar7 = do_something_2(somevar5, somevar6)
if somevar7 is None:
logger.info('some message')
continue
do_something_3()
def should_skip_that_loop(*args, **kwargs):
if somevar1 and somevar2 is None:
return True
if somevar3 is None:
logger.info('some message')
return True
if somevar4 is None:
logger.info('some message')
return True
return False