Python中对于条件判断,可以使用1或者True来作为expression,那么1和True有什么区别?
运行一段代码来看看
import timeit
def while_true():
i=0
while True:
i+=1
if i==10000000:
break
def while_1():
i=0
while 1:
i+=1
if i==10000000:
break
if __name__ == "__main__":
t_one = timeit.timeit(while_1,"from __main__ import while_1",number=3)
t_true = timeit.timeit(while_true,"from __main__ import while_true",number=3)
print('while 1: %s\nwhile_true: %s'%(t_one,t_true))
timeit默认执行次数number为1000000次,这边没有使用默认值,而是把while循环次数设得比较高,你们可以想想是为什么?^_^
py版本均为64位。
在py2.7.13上运行结果的值比较稳定,我截取一个结果
然后在py3.6.1上运行,
what?py3上的while 1为什么会耗时更长?
我们再来用dis查看while 1 和 while True的执行过程
import dis
def while_1():
while 1:
pass
def while_true():
while True:
pass
if __name__ == "__main__":
print('while_1\n')
dis.dis(while_1)
print('while_true\n')
dis.dis(while_true)
py3上的执行过程,while 1和while True完全一样,可以对比一下py2上的dis解析结果,py2上True不是关键字,会多变量查找过程和比较过程,True耗时比1长是可以理解的
为什么py3上,相同的过程会耗时不一致呢?
试着将timeit的两句调换一下先后,变成这样
t_true = timeit.timeit(while_true,"from __main__ import while_true",number=3)
t_one = timeit.timeit(while_1,"from __main__ import while_1",number=3)
结果如下