Как вы уже упоминали, PEP8 явно не упоминает оператор слайса в этом формате, но spam[3:5]
определенно более распространен и ИМХО более читабелен.
Если pep8 checker что бы ни проходило, пробел перед :
будет помечен как
[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]
.
Вложенные арифметические операции немного сложнее.Из ваших трех примеров только второй проходит проверку 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]