样式,格式化切片运算符

geo*_*org 11 python coding-style

PEP 8未提及切片运算符.根据我的理解,与其他运算符不同,它不应该用空格包围

spam[3:5]   # OK
spam[3 : 5] # NOT OK
Run Code Online (Sandbox Code Playgroud)

在使用复杂表达式时,这是否成立,即哪一个被认为是更好的样式

     1. spam[ham(66)//3:44+eggs()]
     2. spam[ham(66) // 3: 44 + eggs()]
     3. spam[ham(66) // 3 : 44 + eggs()]
     4. something else?

Sha*_*hin 8

正如您已经提到的,PEP8没有明确提到该格式的切片运算符,但spam[3:5]肯定更常见,并且IMHO更具可读性.

如果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 ':'
Run Code Online (Sandbox Code Playgroud)

...但这仅仅是因为它假定:是运算符来定义文字字典,并且在运算符之前不会有空格.spam[3: 44]因为这个原因通过,但这似乎不对.

在那个数字上,我坚持spam[3:44].


嵌套算术运算有点棘手.在您的3个示例中,只有第2个通过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 ':'
Run Code Online (Sandbox Code Playgroud)

但是,我发现以上所有内容都难以乍一看.

为了便于阅读和遵守PEP8,我个人会去:

 spam[(ham(66) // 3):(44 + eggs())]
Run Code Online (Sandbox Code Playgroud)

或者更复杂的操作:

 s_from = ham(66) // 3 
 s_to = 44 + eggs()
 spam[s_from:s_to]
Run Code Online (Sandbox Code Playgroud)