避免多次中频以确保Mccabe的复杂性

时间:2018-10-17 08:01:52

标签: python algorithm if-statement cyclomatic-complexity

对于以下情况,我想问您不同的观点:假设我们有几个列表,对于不为空的列表,应该执行一些操作:

r-markdown

代码本身非常简单易懂,但是对于Mccabe复杂度而言,这将抛出(12)值。要降低此值,您将如何处理?我很愿意听到您的想法。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果将所有列表都放在列表列表中:

lol = [l1,l2,l3,l4,l5,l6,l7,l8,l9]

然后您可以遍历列表列表:

for l in lol:
    if l:
        # do something

答案 1 :(得分:0)

使用列表列表和功能列表

def f1(l1):
   # do whatever is required to the  l1 list

def f2(l2):
   # similarly

# and similarly for f3 .. f9

...

lofl = [ l1, l2, l3, l4, l5, l6, l7, l8, l9 ]
loff = [ f1, f2, f3, f4, f5, f6, f7, f8, f9 ]

for f, l in zip( loff, lofl):
    if l:  # if the functions f cannot themselves safely do nothing for a falsy argument
        f( l) 

希望,所需功能的数量略少于九个(在此示例中)。您还可以轻松地向函数传递参数,因此函数可以是通用的,并且可以告诉函数在被称为

时要执行的变体操作
for f, l, p in zip( loff, lofl, lofp): # or, zip( loff, lofl, list(range(9)) )
    f(l, p)

或者甚至甚至向函数传递任意一组关键字参数

lofargs=[ { 'foo':1, 'bar':'Monty' }, # kwargs for f1
          { 'foo':2, 'bar':'Python'}, 
          { 'foo':3 }, 
          {},                     # no kwargs at all for f4, 
          ...
        ]


for f, l, k in zip( loff, lofl, lofargs):
    f( l, **k )