我理解为了编写优秀的Python代码,我应该保持我的行不超过79个字符。
这在大多数时候都很好,但如果我有各种嵌套的for循环和if语句本身嵌套在一个类中,我可能很容易发现我有5或6个缩进(即20-24个字符,如果我是在我开始之前,每次缩进4个空格。然后79字符限制变得相当棘手。我知道各种技巧,如括号内的隐式延续,并使用括号来连接长字符串,但即便如此,它也有点繁琐。
那么,你们的大师建议什么?
缩进2个空格而不是4个会有所帮助,但这被认为是好风格吗?不确定它是否有助于使我的代码更具可读性,并且我注意到PEP8说要使用4个空格。
如果我发现我有多个级别的缩进,那么我是否可以签署我写的错误代码?如果是这样,有什么有用的提示或技巧可以避免过多的嵌套?
我是否正确地尝试坚持79个字符的建议?
或者我是否只需要习惯在多行中分解的很多语句?
由于 亚当
答案 0 :(得分:7)
您经常可以使用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
查看here的真实示例,使用combinations
查看here示例。
当你有很多if
语句时,通常可以重新组织代码以保存缩进步骤,同时使代码更清晰。基本思想是首先处理错误,然后立即处理return
的情况,以便条件的主体到目前为止不需要缩进(或者,在很多情况下,根本不需要缩进) )。例如,如果您有以下代码:
if x >= 0:
if x == 0:
return 1
else:
# ... main body here ...
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
为主体节省了两级缩进。