【发布时间】:2018-10-17 08:01:52
【问题描述】:
我想问你对以下场景的不同观点:假设我们有几个列表,应该对那些不为空的列表执行一些操作:
if l1 or l2 or l3 or l4 or l5 or l6 or l7 or l8 or l9:
print 'we have to do something in one or more lists'
if l1:
print 'l1'
f1()
if l2:
print 'l2'
f2()
if l3:
print 'l3'
f3()
if l4:
print 'l4'
f4()
if l5:
print 'l5'
f5()
if l6:
print 'l6'
f6()
if l7:
print 'l7'
f7()
if l8:
print 'l8'
f8()
if l9:
print 'l9'
f9()
代码本身简单易懂,但这会为 Mccabe 复杂性带来 (12) 值。要降低此值,您将如何处理它?我非常愿意听听您的想法。
提前谢谢你。
更新:
想象正是这种具体情况。你怎么能接近它?:
if a:
A = True
if b:
B = True
if c:
C = True
if d:
D = "D"
if e:
E = "E"
if f:
F = "F"
我认为,在这种情况下,创建 6 个不同的函数效率不高,pythonic...
【问题讨论】:
-
为什么还要顶
if?其短路的好处可以忽略不计,在最坏的情况下(只有l9不为空)此代码检查每个列表两次。 -
嗨@DeepSpace,打印它存在的名单只是一个例子,在里面我必须做不同的事情,我要改变它
-
这仍然不能回答为什么你需要
if l1 or l2 or l3 or l4 or l5 or l6 or l7 or l8 or l9: -
@Solar 为什么一样?它们有不同的值要附加到列表中。在接受的答案中,建议迭代条件和那些值。您还可以迭代条件和相应的函数。比如:
conditions = [l1, l2, ...]; functions = [f1, f2, ...]; for condition, function in zip(conditions, functions): if condition: function()
标签: python algorithm if-statement cyclomatic-complexity