我可以使用dictonary方法,还是有更好的方法?

时间:2017-07-20 18:32:36

标签: python python-3.x

我可以使用dictonary方法,还是有更好的方法来做到这一点?

if data_msb=='1' or data_lsb=='1' or addr_msb=='1' or addr_lsb=='1':
     print_hex_vector(hexF,hex1,modify_vector,output_file,line)
if data_msb=='2' or data_lsb=='2' or addr_msb=='2' or addr_lsb=='2':
     print_hex_vector(hexF,hex2,modify_vector,output_file,line)   
if data_msb=='3' or data_lsb=='3' or addr_msb=='3' or addr_lsb=='3':
     print_hex_vector(hexF,hex3,modify_vector,output_file,line)
if data_msb=='4' or data_lsb=='4' or addr_msb=='4' or addr_lsb=='4':
     print_hex_vector(hexF,hex4,modify_vector,output_file,line)
if data_msb=='5' or data_lsb=='5' or addr_msb=='5' or addr_lsb=='5':
     print_hex_vector(hexF,hex5,modify_vector,output_file,line)
if data_msb=='6' or data_lsb=='6' or addr_msb=='6' or addr_lsb=='6':
     print_hex_vector(hexF,hex6,modify_vector,output_file,line)

2 个答案:

答案 0 :(得分:1)

为什么不将所有org-link-set-parameters变量放在列表中并迭代它?

hexN

答案 1 :(得分:0)

喜欢 Dijstra 说:

  

两个或更多,使用for ” - Edsger W. Dijstra

这实际上是反对复制粘贴和轻微修改代码的口头禅。从你必须这样做的那一刻起,你应该开始考虑“我如何概括这个?”。

如何使用:

setvals = {data_msb,data_lsb,addr_msb,addr_lsb}
for vl,hx in [('1',hex1),('2',hex2),('3',hex3),('4',hex4),('5',hex5),('6',hex6)]:
    if vl in setvals:
        print_hex_vector(hexF,hx,modify_vector,output_file,line)

如果值数字字符串,例如'1''2'等,您可以使用:

setvals = {data_msb,data_lsb,addr_msb,addr_lsb}
for vl,hx in enumerate([hex1,hex2,hex3,hex4,hex5,hex6],1):
    if str(vl) in setvals:
        print_hex_vector(hexF,hx,modify_vector,output_file,line)

枚举中的1用于表示值以'1'开头。

使用set会略微提升效果。从现在开始,查找将平均在 O(1)中完成,因此可能会减少检查的数量。