Как перенести строку по правилам PEP8?

как перенести эту строку кода? просто по правилам максимум 101 символов, а тут 150

lines = *map("".join, field), *map("".join, zip(*field)), *map("".join, zip(*((row[index], row[-index - 1],) for index, row in enumerate(field))))

Ответы (2 шт):

Автор решения: FotonPC
lines = *map("".join, field),\
        *map("".join, zip(*field)),\
        *map("".join, zip(*((row[index], row[-index - 1],)
            for index, row in enumerate(field))))

Вот так ^. Используйте слеш для переноса строк (любых).

→ Ссылка
Автор решения: insolor
lines = *map("".join, field), \
        *map("".join, zip(*field)), \
        *map("".join, zip(*((row[index], row[-index - 1],)
                            for index, row in enumerate(field))))

Проверял с помощью flake8 - ошибок не показывает.

Почему for так нужно форматировать - потому что здесь он часть конструкции (generator expression):

((row[index], row[-index - 1],) for index, row in enumerate(field))

И если переносить for на следующую строку, то он должен быть на 1 пробел правее самой левой скобки этой конструкции (не самой левой скобки предыдущей строки), таким образом как бы оставаясь внутри этой скобки (это создатели pep8 подразумевают под visual indent):

((row[index], row[-index - 1],)
 for index, row in enumerate(field))

Лайфхак: можно было вставить эту строку в PyCharm, добавить переносы строк, все отступы PyCharm сам бы правильно сделал (не всегда работает на 100% правильно, но с переносом generator expression и более простых конструкций работает).

Вообще, кроме pep8 существует Дзен Python и здравый смысл в конце концов, и лучше бы это нечитаемое нагромождение кода расписать на несколько отдельных строк без всяких извращений.

→ Ссылка