缩进与对齐
对于Python初学者来说,可能会经常看到这样的报错提示:IndentationError: expected an indented block,IndentationError: unexpected indent等等。这都表示缩进错误。
pep8规范要求4个空格为一个缩进级别,而Python里面的分支结构if与循环结构for是没有{}的,判断语句是否在循环或者分支结构内,靠的是缩进与对齐。应该缩进的地方就要缩进,不该缩进的地方不要缩进。因为Python的这种特性,在写分支结构或者循环结构时,不同的缩进、对齐方式,可能会返回不同的结果,甚至是报错。
上图贴出了同一个for循环下,三种不同的缩进对齐写法,第二段代码由于第三行没有缩进,导致这一行代码没有进入循环结构中,最终运行结果出现差异。而第三段代码则因为第二行没有缩进报错(IndentationError: expected an indented block),这是因为在这里需要4个空格的缩进。
通过一个小技巧优化代码
下面这两段代码展示了通过削减循环次数来提高运行效率。
求10000以内的完美数:
from time import time
start = time()
for num in range(1, 10001):
my_sum = 0
for i in range(1, num):
if num % i == 0:
my_sum += i
if num == my_sum:
print(num)
end = time()
print((end-start), "秒")
from time import time
from math import sqrt
start = time()
for num in range(2, 10001):
my_sum = 1
for i in range(2, int(sqrt(num))+1):
if num % i == 0:
my_sum += i
if i != num // i:
my_sum += num // i
if num == my_sum:
print(num)
end = time()
print((end-start), "秒")
可以看到优化后的代码,运行时间仅为未优化的代码的1.3%,从而提高了效率。