Слишком длинная строка E501 в стиле Pycode (118 > 79 символов)

charr_prob = float(self.char_freq(kgram, char) * 1.0 / (self.kgram_freq(kgram) * 1.0))

Как я могу это исправить?


person shahmeer arhsad    schedule 10.04.2018    source источник
comment
Возможный дубликат Слишком длинная строка. Джанго PEP8   -  person geisterfurz007    schedule 10.04.2018


Ответы (1)


Длинные строки не обязательно плохи, если они не влияют на удобочитаемость. Это дело вкуса. Вы можете отключить предупреждение, добавив # noqa, либо разбить строку на несколько:

Например. используя скобки:

charr_prob = (float(self.char_freq(kgram, char) * 1.0 
              / (self.kgram_freq(kgram) * 1.0)))

Поскольку float уже использует круглые скобки:

charr_prob = float(self.char_freq(kgram, char) * 1.0
             / (self.kgram_freq(kgram) * 1.0))

Вы также можете использовать \ в конце первой строки, чтобы включить вторую строку в текущее выражение. Здесь это будет избыточно со скобками, определенными для float, но если вы удалите вызов float, это будет:

charr_prob = (self.char_freq(kgram, char) * 1.0) \
             / (self.kgram_freq(kgram) * 1.0)

Вы также можете упростить выражение, когда это возможно. Предполагая, что вы используете Python3 (и, следовательно, / не является целочисленным делением):

charr_prob = self.char_freq(kgram, char) / self.kgram_freq(kgram)

Или для Python2 (79 символов!):

charr_prob = float(self.char_freq(kgram, char)) / float(self.kgram_freq(kgram))

Или, как предложил @Blender, даже:

charr_prob = float(self.char_freq(kgram, char)) / self.kgram_freq(kgram)

... второй float не нужен, поскольку первый операнд / уже является числом с плавающей запятой. Другая возможность — импортировать поведение / из Python3 в Python2:

from __future__ import division
person Guybrush    schedule 10.04.2018
comment
Чтобы сделать его короче, вам не нужно больше одного float в версии Python 2. Вы также можете сделать from __future__ import division и использовать версию Python 3 в обоих случаях. - person Blender; 10.04.2018
comment
Верно! Спасибо @Blender. Я отредактировал свой ответ, включив ваше предложение. - person Guybrush; 10.04.2018
comment
pycodestyle, кажется, также считает отступ как символы charr_prob = (float(self.char_freq(kgram, char) * 1.0 имеет длину всего 53 символа. Но pycodestyle считает его длиной 87 символов, включая отступ - person shahmeer arhsad; 10.04.2018
comment
У вас есть 34 символа только для отступа кода? Это очень много (и не кратно 4 или 8, кстати ;-) Одна из возможностей в этом случае может состоять в том, чтобы переместить часть кода в отдельные функции. Другая возможность - просто игнорировать предупреждение, поскольку PEP8 - это всего лишь рекомендация;) - person Guybrush; 10.04.2018