for循环在Python中有几点要注意的地方
一:大小循环问题,小循环在外,大循环在内
>>> import time
>>> total = 1
>>> time1 = time.time()
>>> for i in range(10):
... for j in range(10000000):
... total *= i + j
>>> time2 = time.time()
>>> print(time2 - time1)
168.1079998016
vs
>>> import time
>>> total = 1
>>> time3 = time.time()
>>> for i in range(1000000):
... for j in range(10):
... total *= i + j
>>> time4 = time.time()
>>> print(time4 - time3)
186.583000183
上面两种情形,同样遍历两次for循环,第一种方式无论耗时,性能都要比第二种好的多。 原因就是第二种方式,CPU要不停的切换,切换是需要耗时的,而且第二种方式从美观来说,是不如第一种。
二:在循环的时候,最好使用xrange来替代range
range()函数再遍历的时候会一次性列表都获取出来,xrange()会一个个获取,如果数据量小时,区别很小,如果数据量特别大时,差别会很大!
import time
total = 1
time1 = time.time()
for i in xrange(10):
for j in xrange(100000000):
total *= i + j
time2 = time.time()
print(time2 - time1)
>>> # 使用xrange函数耗时: 125秒
125.180000067
vs
import time
total = 1
time1 = time.time()
for i in range(10):
for j in range(100000000):
total *= i + j
time2 = time.time()
print(time2 - time1)
>>> # 使用range函数耗时: 167秒
167.417999983
同样的条件,使用xrange函数无疑比range快些,数据量越大,会越明显!
三:如果for循环有条件判断,可以将条件放到for循环外
上面的这一条主要的安装Python的代码规范来说的。按照PEP8的规范无疑更推荐这种:
>>> if OS_TYPE = "win32":
>>> for i in range(len(ONE_VAR)):
>>> ......
>>> else:
>>> for j in range(len(TWO_VAR)):
>>> ......