Вам нелегко придерживаться 80 столбцов с Python? [закрытый]

Это связано с тем, что различные значения, используемые в JS (браузером) и PHP или на самом деле, сколько бит используется для хранения чисел.

вы можете заставить вашу функцию округления JS сделать это, чтобы округлить до вторая цифра Math.round(floatNumber*100)/100

15
задан ApplePieIsGood 24 February 2009 в 18:49
поделиться

12 ответов

"Глупая непротиворечивость является эльфом небольших умов, обожаемых маленькими государственными деятелями и философами, и предугадывает".

важная часть "глупа".

предел на 80 столбцов, как другие части PEP 8 является довольно сильным предложением. Но, существует предел, вне которого это могло рассматриваться как глупая непротиворечивость.

у меня есть руководства по добавлению отступа и граничная строка, включенная в Комодо. Тем путем я знаю, когда я работал. Вопросы "почему?" и "действительно ли стоит зафиксировать его?"

Вот наши общие ситуации.

регистрирующиеся сообщения . Мы пытаемся сделать их легкими перенестись. Они похожи на это

logger.info( "unique thing %s %s %s",
   arg1, arg2, arg3 )

выражения фильтра Django . Они могут работать, но это - хорошая вещь. Мы часто пришиваем несколько фильтров подряд. Но это не должна быть одна строка кода, несколько строк могут сделать это более ясным, что продолжается.

Это - пример программирования функционального стиля, где долгое выражение разумно. Мы избегаем его, как бы то ни было.

Модульный тест Ожидаемые Строки Результата . Они происходят, потому что мы вырезаем и вставляем для создания кода модульного теста и не проводим много времени, осуществляя рефакторинг его. Когда это прослушивает нас, мы дергаем за ниточки в отдельные строковые переменные и моемся эти self.assertXXX() строки.

у Нас обычно нет длинных строк кода, потому что мы не используем лямбды. Мы не боремся за быстрый дизайн класса. Мы не передаем партии и много аргументов (кроме нескольких случаев).

у Нас редко есть много функционального стиля многоречивые выражения. Когда мы делаем, мы не смущены, чтобы разбить их и разбросать промежуточную ложь результата. Если бы мы были функциональными пуристами, то у нас мог бы быть газ с промежуточными переменными результата, но мы не пуристы.

12
ответ дан 30 November 2019 в 23:50
поделиться

Я рекомендую пытаться остаться верным 80 столбцам, но не в любая стоимость . Иногда, как для входа сообщений, просто имеет больше смысла сохранять их долго, чем разбивание. Но для большинства случаев, как сложные условия или понимания списка, разбивание является хорошей идеей, потому что оно поможет Вам разделить сложную логику к более понятным частям. Легче понять:

print sum(n for n in xrange(1000000) 
             if palindromic(n, bits_of_n) and palindromic(n, digits))

, Чем:

print sum(n for n in xrange(1000000) if palindromic(n, bits_of_n) and palindromic(n, digits))

Это может выглядеть одинаково Вам, если Вы только что записали это, но после нескольких дней те длинные линии становятся твердыми понять.

<час>

Наконец, в то время как PEP 8 диктует ограничение столбца, он также говорит:

руководство по стилю А о непротиворечивости. Непротиворечивость с этим руководством по стилю важна. Непротиворечивость в рамках проекта более важна. Непротиворечивость в одном модуле или функции является самой важной.

, Но самое главное: знайте, когда быть непоследовательными - иногда, руководство по стилю просто не применяется. Когда в сомнении, используйте свое лучшее суждение. Посмотрите на другие примеры и решите что взгляды лучше всего. И спросите!

27
ответ дан 30 November 2019 в 23:50
поделиться

Не имеет значения, какой год - это или какие устройства вывода Вы используете (в некоторой степени). Ваш код должен быть читаемым, если это возможно, люди . Людям трудно считать длинные линии.

Это зависит от содержания строки, какой длины это должно быть. Если Это - сообщение журнала тогда, его длина имеет значение меньше. Если это будет сложный код тогда, то его большая длина не будет помогать постигать его.

9
ответ дан 30 November 2019 в 23:50
поделиться

Строки специальны, потому что они имеют тенденцию быть длинными, поэтому повредите их, когда Вы нуждаетесь и не волнуетесь об этом.

, Когда Ваше фактическое код начинает ударять метку на 80 столбцов, это - знак, что Вы могли бы хотеть разбить глубоко вложенный код в меньшие логические блоки.

3
ответ дан 30 November 2019 в 23:50
поделиться

Я имею дело с ним, не волнуясь о длине моих строк. Я знаю, что некоторые строки, которые я пишу, являются дольше, чем 80 символами, но большинство из них не.

я знаю, что мое положение не считают "pythonic" многие, и я понимаю их точки. Часть того, чтобы быть инженером знает компромиссы для каждого решения и затем принимает решение, что Вы думаете, является лучшим.

3
ответ дан 30 November 2019 в 23:50
поделиться

Я предложил бы быть готовым пойти вне 80 столбцов. 80 столбцов являются пережитком от того, когда это был жесткий предел на основе различных устройств вывода.

Теперь, я не пошел бы, пожиратель ресурсов, дикий..., установил разумный предел, но arbitary предел 80 столбцов кажется немного фанатичным.

РЕДАКТИРОВАНИЕ: Другие ответы - также clarifing это: имеет значение, что Вы повреждаете. Строки могут чаще быть "особыми случаями", где можно хотеть изогнуть правила немного ради ясности. Если Ваш код , с другой стороны, становится длинным, это - хорошее время для взгляда на то, где логично разбить его.

4
ответ дан 30 November 2019 в 23:50
поделиться

80 количеств столбцов являются одним из нескольких мест, я не соглашаюсь с руководством по стилю Python. Я рекомендовал бы смотреть на аудиторию для кода. Если все, Вы работаете с использованием современный IDE на мониторе с разумным разрешением, это, вероятно, не стоит Вашего времени. Мой монитор является дешевым и имеет относительно слабое разрешение, но я могу все еще соответствовать 140 столбцам плюс полосы прокрутки, маркеры строки, маркеры повреждения и отдельный кадр структурного вида слева.

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

4
ответ дан 30 November 2019 в 23:50
поделиться

Это - хорошее правило придерживаться значительной части времени, но не вытаскивает Ваши волосы по ним. Самая важная вещь состоит в том, что стилистически Ваш код выглядит читаемым и чистым, и хранение Ваших строк к разумной длине является частью этого.

Иногда более хорошо позволить вещам, на которых работают больше чем для 80 столбцов, но большую часть времени я могу написать свой код, таким образом, что это коротко и кратко и вписывается 80 или меньше. Поскольку некоторые респонденты указывают, что предел 80 скорее датирован, но это не плохо, чтобы иметь такой предел, и у многих людей есть терминалы

, Вот некоторые вещи, которые я имею в виду при попытке ограничить длину моих строк:

  • этот код, который я ожидаю, что другие люди будут использовать? Если так, каков стандарт, который те другие люди и используют для этого типа кода?
  • те люди имеют ноутбуки, используют гигантские шрифты или имеют другие причины их экранной ограничиваемой недвижимости?
  • код выглядит лучше мне, распадаются в несколько строк, или как одна длинная линия?

Это - стилистический вопрос, но стиль действительно важен, потому что Вы хотите, чтобы люди считали и поняли Ваш код.

6
ответ дан 30 November 2019 в 23:50
поделиться

Временные переменные. Они решают почти каждую проблему, которую я имею с длинными линиями. Достаточно редко я должен буду использовать некоторый дополнительный parens (как в более длинном операторе "if"). Я не приведу аргументов за или против 80 символьных ограничений с тех пор, который кажется не важным.

А именно, для сообщения журнала; вместо:

self._log.info('Insert long message here')

Использование:

msg = 'Insert long message here'
self._log.info(msg)

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

obj.some_long_method_name(subtotal * (1 + tax_rate))

Использование:

grand_total = subtotal * (1 + tax_rate)
obj.some_long_method_name(grand_total)

Почти каждая длинная линия, которую я видел, пытается сделать больше чем одну вещь, и это тривиально для вытаскивания одной из тех вещей во временную переменную. Основным исключением являются очень длинные строки, но обычно существует что-то, что можно сделать там также, так как строки в коде часто структурируются. Вот пример:

br = mechanize.Browser()
ua = '; '.join(('Mozilla/5.0 (Macintosh', 'U', 'Intel Mac OS X 10.4',
                'en-US', 'rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6'))
br.addheaders = [('User-agent', ua)]
7
ответ дан 30 November 2019 в 23:50
поделиться

80 символьных пределов? Какой год - это?

Делают Ваш код читаемым. Если длинная линия читаема, она прекрасна. Если трудно читать, разделите его.

, Например, я склонен делать длинные линии, когда существует вызов метода с большим количеством аргументов, и аргументами являются нормальные аргументы, которые Вы ожидали бы. Так, скажем, я раздаю 10 переменных к набору методов. Если каждый метод берет идентификатор транзакции, ID заказа, идентификатор пользователя, номер кредитной карты, и т.д., и они хранятся в соответственно именованных переменных, то для вызова метода нормально появляться на одной строке со всеми переменными один за другим, потому что нет никаких неожиданностей.

, Если, однако, Вы имеете дело с несколькими транзакциями в одном методе, необходимо удостовериться, что следующий программист видит, что НА ЭТОТ РАЗ Вы используете transId1, и ЧТО время transId2. В этом случае удостоверьтесь, что это ясно. (Отметьте: иногда использование длинных линий ПОМОГАЕТ этому также).

Просто, потому что в "руководстве по стилю" говорится, необходимо сделать что-то, не означает, что необходимо сделать это. Некоторые руководства по стилю просто неправильные .

2
ответ дан 30 November 2019 в 23:50
поделиться

Выберите стиль, Вы любите, применяете слой здравого смысла и последовательно используете его.

PEP 8 является руководством по стилю для библиотек, включенных как часть библиотеки стандарта Python. Это никогда не предназначалось, чтобы быть взятым как правила стиля для всего кода Python. Тем не менее нет никакой причины, люди не должны использовать его, но это - определенно не ряд твердых правил. Как любой стиль, нет никакого единственного корректного пути, и самой важной вещью является непротиворечивость.

-1
ответ дан 30 November 2019 в 23:50
поделиться

Придерживаться 80 колонок важно не только для удобства чтения, но и потому, что многие из нас любят иметь узкие окна терминалов, чтобы одновременно с кодированием видеть такие вещи, как документацию по модулю, загруженную в веб-браузере, и сообщение об ошибке, сидящее в xterm. Отдавать весь экран IDE - довольно примитивный, если не сказать однообразный, способ использования экранного пространства.

Как правило, если строка растягивается более чем на 80 колонок, это означает, что что-то идет не так: либо вы пытаетесь сделать слишком много на одной строке, либо допустили слишком глубокий отступ в разделе кода. Я редко нахожу, что упираюсь в правый край экрана, если мне не удается также рефакторить то, что должно быть отдельными функциями; давать имена временным результатам; и делать другие вещи, которые в конечном итоге значительно облегчат тестирование и отладку. Почитайте руководство Линуса по стилю кодирования ядра, в котором есть хорошие моменты на эту тему, хотя и с точки зрения языка Си:

http://www.kernel. org/doc/Documentation/CodingStyle

И всегда помните, что длинные строки можно либо разбить на более мелкие части:

print ("When Python reads in source code"
       " with string constants written"
       " directly adjacent to one another"
       " without any operators between"
       " them, it considers them one"
       " single string constant.")

Или, если они действительно длинные, их лучше всего определить как константу, а затем использовать в коде под этим сокращенным именем:

STRING_MESSAGE = (
        "When Python reads in source code"
        " with string constants written directly adjacent to one"
        " another without any operators between them, it considers"
        " them one single string constant.")

...
print STRING_MESSAGE
...
3
ответ дан 30 November 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: