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

时间:2013-10-24 09:21:53

标签: python coding-style

我理解为了编写优秀的Python代码,我应该保持我的行不超过79个字符。

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

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

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

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

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

或者我是否只需要习惯在多行中分解的很多语句?

由于 亚当

1 个答案:

答案 0 :(得分: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))

成为单循环:

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示例。

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))

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

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

为主体节省了两级缩进。