在python中,我在一个很长的循环中使用并尝试/ very语句。如果引发异常,则不应采取任何措施。
try :
*Some Code*
except :
pass如果我使用第一个命题,循环计算的总时间约为10分钟。
try :
*Some Code*
except :
None如果我使用第二个提议,循环计算的总时间约为2分钟。
为什么它是如此不同,为什么第二个更快,因为,在逻辑上,传球是一个比没有更好的解决方案?
确切的代码是:
try:
indexes = peakutils.peak.interpolate(self.list_height, input_1, ind=indexes, width=self.gauss_width)
except:
None / Pass我用这两种丙做了几次测试,结果总是一样的。
如何计算时间:
start = default_timer()
im.get_events() #The loop where the try/except statement appears
finish = default_timer()
print('ELAPSED TIME : %s'%(finish - start))发布于 2017-07-05 09:45:27
赋予两项职能:
def func_none():
return None
def func_pass():
pass他们在做同样的事情,使用dis进行验证。
>>> import dis
>>> dis.dis(func_none)
# 0 LOAD_CONST 0 (None)
# 3 RETURN_VALUE
>>> dis.dis(func_pass)
# 0 LOAD_CONST 0 (None)
# 3 RETURN_VALUE实际上,以下是经过的定义
pass是一个空操作--当它被执行时,什么都不会发生。当语句在语法上是必需的,但不需要执行代码时,它作为占位符非常有用,例如:
结论:pass语句在理论上与None一样快。
编辑:为什么使用None而不是return None的时间可能比较慢(如OP示例中所示)。
赋予两项职能:
def func_none():
try:
1/0
except:
None
def func_pass():
try:
1/0
except:
pass使用dis的不同之处:
>>> import dis
>>> dis.dis(func_none)
# Skip to expect part
18 LOAD_CONST 0 (None)
21 POP_TOP
22 JUMP_FORWARD 1 (to 26)
25 END_FINALLY
26 LOAD_CONST 0 (None)
29 RETURN_VALUE
dis.dis(func_pass)
# Skip to expect part
18 JUMP_FORWARD 1 (to 22)
21 END_FINALLY
22 LOAD_CONST 0 (None)
25 RETURN_VALUE 因此很明显,使用None而不是pass将增加两个额外的操作LOAD_CONST和POP_TOP。它不应该增加8分钟,所以我相信这不是真正的原因。
https://stackoverflow.com/questions/44921972
复制相似问题