1. 循环
通常可以使用 itertools.product
或itertools.combinations
来将嵌套的循环转换为单个循环。
如果循环是独立的,请使用 product
。例如,这些嵌套的循环:
for x in range(3):
for y in range(5):
for z in range(7):
print((x, y, z))
成为单一循环:
from itertools import product
for x, y, z in product(range(3), range(5), range(7)):
print((x, y, z))
当循环索引必须不同的时候,您可以使用combinations
。例如,这些嵌套循环:
for start in range(length - 1):
for end in range(start + 1, length):
print((start, end))
成为单一循环:
from itertools import combinations
for start, end in combinations(range(length), 2):
print((start, end))
请参考此处一个使用product
的实际示例,以及此处一个使用combinations
的示例。
2. 条件语句
当您有很多if
语句时,通常可以重新组织代码以节省缩进步骤,并同时使代码更清晰。基本思想是先处理错误,然后处理可以立即返回的情况,这样条件的主体就不需要缩进太远(或者在许多情况下根本不需要缩进)。例如,如果您有像下面这样的代码:
if x >= 0:
if x == 0:
return 1
else:
return result
else:
raise ValueError("Negative values not supported: {!r}".format(x))
然后您可以像这样重新组织代码:
if x < 0:
raise ValueError("Negative values not supported: {!r}".format(x))
if x == 0:
return 1
# ... main body here ...
return result
这样做可以为主体部分节省两个缩进级别。