我最近了解到python没有switch/case语句。我一直在读关于用字典代替字典的书,例如:values = {
value1: do_some_stuff1,
value2: do_some_stuff2,
valueN: do_some_stuffN,
}
values.get(var, do_default_stuff)()
我搞不懂的是如何把这个应用到靶场测试中。所以,与其做一些事情,如果value1=4比如说,做一些事情,如果value1<4.这样的事情(我知道这不起作用):values = {
if value1
if value2 >val: do_some_stuff2,
}
values.get(var, do_default_stuff)()
我试过用if/elif/else语句来实现这一点。它工作得很好,但与我不需要IF语句的情况相比,它看起来要慢得多(这可能是显而易见的不可避免的事情)。下面是我的代码和if/elif/else语句:if sep_ang(val1,val2,X,Y)>=ROI :
main.removeChild(source)
elif sep_ang(val1,val2,X,Y)<=5.0:
integral=float(spectrum[0].getElementsByTagName("parameter")[0].getAttribute("free"))
index=float(spectrum[0].getElementsByTagName("parameter")[0].getAttribute("free"))
print name,val1,val2,sep_ang(val1,val2,X,Y),integral,index
print >> reg,'fk5;point(',val1,val2,')# point=cross text={',name,'}'
else:
spectrum[0].getElementsByTagName("parameter")[0].setAttribute("free","0") #Integral
spectrum[0].getElementsByTagName("parameter")[1].setAttribute("free","0") #Index
integral=float(spectrum[0].getElementsByTagName("parameter")[0].getAttribute("free"))
index=float(spectrum[0].getElementsByTagName("parameter")[0].getAttribute("free"))
print name,val1,val2,sep_ang(val1,val2,X,Y),integral,index
print >> reg,'fk5;point(',val1,val2,')# point=cross text={',name,'}'
大约需要5分钟来检查1500个var sep_ang值。如果我不想使用setAttribute()根据sep_ang的值更改xml文件中的值,则使用以下简单的if-else:if sep_ang(val1,val2,X,Y)>=ROI :
main.removeChild(source)
else:
print name,val1,val2,ang_sep(val1,val2,X,Y);print >> reg,'fk5;point(',val1,val2,')# point
只需要大约30秒。我再次知道,添加elif语句和更改该属性的值很可能会不可避免地增加代码的执行时间,我只是好奇是否有办法解决这个问题。
编辑:
在我的情况下,使用对分语句而不是if/elif语句的好处是它可以比使用一堆elif语句更快地检查某个范围内的值吗?
似乎我还需要使用elif语句。例如:range=[10,100]
options='abc'
def func(val)
return options[bisect(range, val)]
if func(val)=a:
do stuff
elif func(val)=b:
do other stuff
else:
do other other stuff
所以我的elif语句只检查一个值。
非常感谢你的帮助,非常感谢。