8

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

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

那么,各位大师有什么建议呢?

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

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

我一开始就坚持 79 个字符的推荐是对的吗?

还是我只需要习惯于多行中断的大量语句?

谢谢亚当

4

1 回答 1

8

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

有关使用 的真实示例,请参见此处,有关使用的示例,请参见此处productcombinations

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

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

于 2013-10-24T09:38:52.973 回答