正如您已经提到的,PEP8 没有明确提及该格式的切片运算符,但是spam[3:5]
绝对更常见,恕我直言,更具可读性。
If pep8 检查器是任何要经过的东西,之前的空间:
将被标记
[me@home]$ pep8 <(echo "spam[3:44]") # no warnings
[me@home]$ pep8 <(echo "spam[3 : 44]")
/dev/fd/63:1:7: E203 whitespace before ':'
...但这只是因为它假设:
是定义文字字典的运算符,并且运算符之前不需要空格。spam[3: 44]
出于这个原因,但这似乎并不正确。
就这一点而言,我会坚持spam[3:44]
.
嵌套算术运算有点棘手。在您的 3 个示例中,只有第二个通过了 PEP8 验证:
[me@home]$ pep8 <(echo "spam[ham(66)//3:44+eggs()]")
/dev/fd/63:1:13: E225 missing whitespace around operator
[me@home]$ pep8 <(echo "spam[ham(66) // 3:44 + eggs()]") # OK
[me@home]$ pep8 <(echo "spam[ham(66) // 3 : 44 + eggs()]")
/dev/fd/63:1:18: E203 whitespace before ':'
然而,我发现上述所有内容乍一看都很难用肉眼来解析。
为了提高 PEP8 的可读性和合规性,我个人会选择:
spam[(ham(66) // 3):(44 + eggs())]
或者对于更复杂的操作:
s_from = ham(66) // 3
s_to = 44 + eggs()
spam[s_from:s_to]