使用多个缩进在Python中保持79个字符行限制

Ada*_*obs 8 python coding-style

我知道要编写好的Python代码,我应该保持我的行不超过79个字符.

这在大多数时候都很好,但如果我有各种嵌套的for循环和if语句本身嵌套在一个类中,我可能很容易发现我有5或6个缩进(即20-24个字符,如果我缩进4个在我开始之前留出时间.然后79字符限制变得相当棘手.我知道各种技巧,如括号内的隐式延续,并使用括号来连接长字符串,但即便如此,它也有点繁琐.

那么,你们的大师们建议什么?

缩进2个空格而不是4个空格会有所帮助,但这被认为是好风格吗?不确定它是否有助于使我的代码更具可读性,并且我注意到PEP8说要使用4个空格.

如果我发现我有多个级别的缩进,那么也许我签署的是我写的是错误的代码?如果是这样,任何有用的提示或技巧,以避免过多的嵌套?

我是否正确地试图坚持79个字符的建议?

或者我是否只需要习惯于多行中的大量语句?

谢谢亚当

Gar*_*ees 7

1.循环

您经常可以使用itertools.productitertools.combinations将嵌套循环转换为单个循环.

当循环独立时,使用product.例如,这些嵌套循环:

for x in range(3):
    for y in range(5):
        for z in range(7):
            print((x, y, z))
Run Code Online (Sandbox Code Playgroud)

成为单循环:

from itertools import product
for x, y, z in product(range(3), range(5), range(7)):
    print((x, y, z))
Run Code Online (Sandbox Code Playgroud)

当循环索引必须是不同的,那么你可以使用combinations.例如,这些嵌套循环:

for start in range(length - 1):
    for end in range(start + 1, length):
        print((start, end))
Run Code Online (Sandbox Code Playgroud)

成为单循环:

from itertools import combinations
for start, end in combinations(range(length), 2):
    print((start, end))
Run Code Online (Sandbox Code Playgroud)

请参阅此处查看使用的实际示例product,此处为使用示例combinations.

2.条件

当您有大量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))
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样重新组织代码:

if x < 0:
    raise ValueError("Negative values not supported: {!r}".format(x))
if x == 0:
    return 1
# ... main body here ...
return result
Run Code Online (Sandbox Code Playgroud)

这为主体节省了两级缩进.