Ada*_*obs 8 python coding-style
我知道要编写好的Python代码,我应该保持我的行不超过79个字符.
这在大多数时候都很好,但如果我有各种嵌套的for循环和if语句本身嵌套在一个类中,我可能很容易发现我有5或6个缩进(即20-24个字符,如果我缩进4个在我开始之前留出时间.然后79字符限制变得相当棘手.我知道各种技巧,如括号内的隐式延续,并使用括号来连接长字符串,但即便如此,它也有点繁琐.
那么,你们的大师们建议什么?
缩进2个空格而不是4个空格会有所帮助,但这被认为是好风格吗?不确定它是否有助于使我的代码更具可读性,并且我注意到PEP8说要使用4个空格.
如果我发现我有多个级别的缩进,那么也许我签署的是我写的是错误的代码?如果是这样,任何有用的提示或技巧,以避免过多的嵌套?
我是否正确地试图坚持79个字符的建议?
或者我是否只需要习惯于多行中的大量语句?
谢谢亚当
您经常可以使用itertools.product
或itertools.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
.
当您有大量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)
这为主体节省了两级缩进.