Почему PEP-8 указывает максимальную длину строки 79 символов?

Почему в этом тысячелетии Python должен PEP-8 указывать максимальная длина строки 79 символов?

Практически каждый редактор кода под солнцем может обрабатывать более длинные строки. Что делать с оберткой, должно быть выбором потребителя контента, а не ответственностью создателя контента.

Есть ли какие-либо (законные) веские причины придерживаться 79 символов в эту эпоху?


person pcorcoran    schedule 18.09.2008    source источник
comment
Ответ на ваш вопрос находится в PEP-8.   -  person cdleary    schedule 01.01.2009
comment
Более короткая длина линии повышает производительность за счет увеличения KLOC. :п   -  person Alex    schedule 02.03.2013
comment
Разве вы не используете параллельные инструменты сравнения?   -  person endolith    schedule 03.03.2016
comment
Сегодня я начал использовать монитор в портретном режиме, и это очень полезно для просмотра полного текста.   -  person qwerty    schedule 01.04.2016
comment
Для тех, кто знаком с перфокартами, перфокарты имели ширину 80 столбцов (en.wikipedia.org /вики/). Затем это значение было принято немыми терминалами ASCII. А потом распространили на другие стандарты...   -  person RBV    schedule 12.11.2016
comment
Ведущий разработчик ядра Python рекомендует 90-й youtu.be/wf-BqAjZb8M?t=260 ( Черные форматы на 88)   -  person Chris_Rands    schedule 01.06.2019
comment
@Jonathan Автор связанного пакета Nova определенно любит разбивать строку кода на несколько строк. Мне очень неудобно читать такой код.   -  person Jeyekomon    schedule 10.06.2019
comment
Черный форматирует в 120, если вы скажете. Я делаю. PEP-8 также говорит, что можно увеличить ограничение длины строки до 99 символов, но люди, похоже, большую часть времени скрывают эту информацию.   -  person NeilG    schedule 26.07.2019
comment
Как вы смеете подвергать сомнению плохие привычки и пороки пожилых людей, которые все еще живут в эпоху CRT?   -  person Pablo Ariel    schedule 06.09.2019
comment
@cdleary Да, он был немного переработан за эти годы, но в настоящее время говорится, что ограничение [...] ширины позволяет открывать несколько файлов одновременно и хорошо работает при использовании инструментов проверки кода, которые представляют две версии. в соседних столбцах. Обтекание по умолчанию в большинстве инструментов нарушает визуальную структуру кода, затрудняя его понимание. [...] Некоторые веб-инструменты могут вообще не предлагать динамический перенос строк.   -  person wjandrea    schedule 25.06.2020
comment
@PeterSmit Кажется, он уже здесь: github.com/openstack/nova/ blob/master/nova/manager.py   -  person wjandrea    schedule 25.06.2020


Ответы (9)


Большая часть ценности PEP-8 состоит в том, чтобы остановить людей, спорящих о несущественных правилах форматирования, и продолжить писать хороший, последовательно отформатированный код. Конечно, никто на самом деле не думает, что 79 оптимальна, но нет никакого очевидного выигрыша в изменении его на 99 или 119 или любую другую длину строки, которую вы предпочитаете. Я думаю, выбор таков: следовать правилу и найти достойную причину для борьбы, или предоставить некоторые данные, демонстрирующие, как читабельность и производительность зависят от длины строки. Последнее было бы чрезвычайно интересно и, я думаю, имело бы хорошие шансы изменить мнение людей.

person Community    schedule 08.05.2010
comment
Большинство исследований чтения выполняются в дюймах, а не в символах на строку. Правило 66 символов основано на исследованиях чтения газет. Недавние исследования показали, что при чтении статей в Интернете скорость чтения увеличивается в разы. примерно до 120 символов в строке (10 дюймов при размере шрифта 12) без потери понимания. - person Pace; 30.03.2013
comment
На самом деле все, кто читал эту тему, думают, что 79 символов оптимальны. Вот почему он был добавлен в PEP8! Этот ответ на самом деле неверен. Это правильный - person erikbwork; 29.04.2013
comment
Я думал вопрос о том, почему 79 лучше 80 или 78 - person n611x007; 12.12.2014
comment
Самая большая проблема, с которой я столкнулся, заключается в том, что я, как и почти все известные мне программисты, использую один и тот же терминал для редактирования и запуска кода. Если вы настроите свой терминал шириной 80, чтобы у вас было место для других вещей на вашем мониторе, когда вы запускаете свой код, ваши трассировки стека и файлы журналов не читаются. Это заставляет вас использовать более широкий терминал. Таким образом, ваш текстовый редактор тратит место впустую. Почему бы не использовать отдельные терминалы? Иногда мы это делаем, но в 95% случаев 1 окно терминала с 1 tmux внутри — это оптимальное решение, которое позволяет мне не мешать мне кодировать. - person Bruno Bronosky; 05.03.2015
comment
there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is Это так неправильно во многих отношениях. Оберните строку в 40 символов и скажите, насколько она читабельна. Очевидно, что меньше обтекания = больше удобочитаемости, если у вас есть место на экране, что в 2015 году у вас есть. Обтекание влияет на читабельность. Удобочитаемость влияет на ремонтопригодность. Ремонтопригодность влияет на качество. И на качество влияет, если вы упаковываете в 80 символов. Полная остановка. - person Jonathan; 09.07.2015
comment
@Шаг. Ссылка «Недавние исследования» не работает. Можете ли вы предоставить обновленную версию? - person Josiah Yoder; 21.09.2016
comment
@JosiahYoder: Если вы ищете длину строки по данной ссылке, вы получите список совпадений. Первое, что я получил, была статья под названием Reading Onscreen: The Effects of Line Length on Performance, в котором говорится, что 95 символов в строке были лучшими в исследовании 2005 года (это было самое длинное, которое они тестировали). Само исследование юзабилити доступно здесь. Примечательно, что участники исследования не читали компьютерный код. - person martineau; 14.06.2017
comment
Бесполезно спорить о читабельности с чем-либо, кроме кода, поскольку эти исследования предполагают бегущий текст. Код выглядит совершенно по-разному с разной (символьной) длиной строки в каждой строке. И даже если вы пишете до конца строки, отступ меняет количество символов в строке. - person Corvince; 07.11.2017
comment
Также мой терминал vt52 всего 80 символов. - person Gadi; 21.11.2017
comment
PEP-8 также говорит, что можно увеличить ограничение длины строки до 99 символов, но люди, похоже, большую часть времени скрывают эту информацию. - person NeilG; 26.07.2019
comment
This is just so wrong in so many ways. Wrap a line at 40 characters and tell me how readable it is. Obviously less wrapping = more readability so long as you have the screen space... And quality is impacted if you're wrapping at 80 chars. Full stop. Не драматизируйте. Это может быть неправильным ровно в одном отношении. Кроме того, вы делаете сильное заявление с большой уверенностью, не предоставляя никаких доказательств. Я также могу утверждать, что даже если у вас есть место на экране, строка из 200 или 300 символов не так читабельна. Полная остановка. :п - person gwg; 16.08.2019
comment
PEP8 был написан людьми, которые до сих пор пишут код с ЭЛТ-экранами. Но это нормально, если конкуренты любят проводить свой день за прокруткой, чтобы увидеть только фрагменты кода для функциональности, которую можно увидеть на экране. Также преимуществом является то, что они пропускают много ошибок, облегчающих контекст. Мне это нравится, и я использую их, чтобы продавать свои работы, как те, у которых вы бы не купили. - person Pablo Ariel; 04.09.2019
comment
Хех... В 2019 году я наконец прочитал PEP-8 и задал тот же вопрос. На самом деле о длине строки кода в целом (почему некоторым людям нравится так плотно обтекать). Конечно, 40 лет назад кодировать на экране телевизора с 40 символами и распечатывать пачки бумаги, чтобы увидеть все это, было весело... но ладно. Не знаю, как вы, ребята, но в эти дни я не чувствую себя эффективным, если у меня нет 4 широкоэкранных мониторов в разных ориентациях. :) Хотя мне всегда больше нравился формат 4:3 для реального использования компьютера (т.е. не для просмотра фильмов). - person Maxim Paperno; 10.10.2019

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

Удобочитаемость также является одной из причин принудительного отступа строки.

person Justin Bozonier    schedule 18.09.2008
comment
Да, разрешено. Но почему 79? Почему не 100 или 120? Сохранение удобочитаемости работает в обоих направлениях. Слишком много чтения кода вверх и вниз также трудно понять. - person pcorcoran; 18.09.2008
comment
Это правда, что многие устройства могут отображать только 80 символов. Сколько из них не могут выполнять мягкую упаковку? - person Jim; 18.09.2008
comment
Большинство редакторов, специфичных для Python, не выполняют перенос слов. - person Chris Upchurch; 18.09.2008
comment
Кроме того, желательно, чтобы код не переносился. С точки зрения пользовательского опыта для большинства это неприемлемо. - person Justin Bozonier; 18.09.2008
comment
Некоторые операционные системы, такие как MVS, не могут обрабатывать строки длиннее 72 символов. PEP-8 тут не поможет. Установка произвольного ограничения в 79 символов не имеет смысла, так как количество символов в строке зависит от редактора, монитора, личных предпочтений пользователя и так далее. - person codymanix; 20.04.2010
comment
79 родом из дней матричных принтеров, они печатали только 80 символов в строке. Сегодня мы все сидим с дисплеями с соотношением сторон 16:9, большой шириной и ограниченным пространством по вертикали... Я следую всем правилам PEP8, кроме этого, я считаю, что его следует привести в соответствие с современными технологиями. - person Gert Steyn; 03.12.2013
comment
79 символов также заставляют программистов использовать более короткие и загадочные имена переменных и функций, чтобы все подходило. Это плохо для читабельности. - person Gert Steyn; 03.12.2013
comment
почему 80-1 лучше, чем 80-0 или 80-2? - person n611x007; 12.12.2014
comment
@GertSteyn Today we all sit не стоит недооценивать кодирование по ssh рядом со стойкой без стульев на олдскульном 4:3. - person n611x007; 12.12.2014
comment
@Jonathan У меня настроен вертикальный монитор с крупным шрифтом (чтобы я мог сидеть дальше от монитора) и часто разделяю окна редактора, чтобы работать с несколькими файлами одновременно. Ограничения длины строки действительно улучшают мою читабельность. - person Ian Hunter; 22.05.2015
comment
Readability is also one of the reasons for enforced line indentation Согласен, но принудительный перенос строк делает код менее читаемым. - person Jonathan; 09.07.2015
comment
80 символов — это максимальное количество символов, которое вы можете прочитать, не перемещая слишком много глаз влево и вправо, при консольном шрифте. Таким образом, вы можете легко прокручивать вверх и вниз и читать все. - person Nic Szerman; 19.09.2020

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

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

Я нахожу неудовлетворительным и разочаровывающим, когда один из этих исходных файлов имеет ширину > 120 символов, потому что это означает, что я не могу удобно разместить строку кода на строке экрана. Это расстраивает форматирование до переноса строки.

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

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

person Jerub    schedule 18.09.2008
comment
Я пишу код с расчетом на 80 столбцов. Это просто для того, чтобы, когда я перехожу эту границу, это не было так уж плохо. Мне то же самое. - person KobeJohn; 04.11.2011
comment
10 лет спустя: разве это не зависит только от того, как вы настроите перенос строк. Перенос строк может быть умным или глупым, как вы этого хотите. Если неудобно читать, то это просто недоработка вашего редактора. - person David Mulder; 10.09.2018
comment
Я кодирую до 120 символов, но иногда длиннее, когда это удобно для чтения. Черный форматирует в 120, если вы скажете. PEP-8 также говорит, что можно увеличить ограничение длины строки до 99 символов, но люди, похоже, большую часть времени скрывают эту информацию. Почти никто не использует терминалы шириной 80. Сообщения журнала никогда не бывают шириной 80. - person NeilG; 26.07.2019

Я полагаю, что те, кто изучает типографику, скажут вам, что 66 символов в строке должны быть наиболее удобочитаемой шириной для длины. Тем не менее, если вам нужно удаленно отладить машину через сеанс ssh, большинство терминалов по умолчанию используют 80 символов, 79 просто подходит, попытка работать с чем-то более широким в таком случае становится настоящей проблемой. Вы также будете удивлены количеством разработчиков, использующих vim + screen в качестве повседневной среды.

person Sean O Donnell    schedule 18.09.2008
comment
‹flame›Emacs FTW!‹/flame› +1, однако. Я думаю, что ограничение в 79 исходит из первых дней UNIX (и, возможно, MULTICS), которые имели терминалы 80x25 символов. - person Joe D; 10.09.2010
comment
В моей среде ssh+screen+vim нет проблем с отображением длинных строк. - person chrishiestand; 01.05.2012
comment
66 символов в строке должны быть наиболее удобочитаемой шириной для длины. Я полагаю, мы должны писать код в 2 или 3 столбца, так как газеты выкладываются так? - person Mark E. Haase; 16.12.2012
comment
@mehaase: ваше саркастическое замечание очень близко к истине: приличные редакторы могут разделять панели и показывать разные материалы рядом (из одного или разных файлов). По совпадению, это обычно возможно только тогда, когда код имеет стандарт длины строки... - person mike3996; 21.10.2015

Печать моноширинным шрифтом с размерами по умолчанию (на бумаге формата А4) составляет 80 столбцов на 66 строк.

person Josh    schedule 18.09.2008
comment
Я принимаю этот стандарт; это действительно. Но кто теперь печатает код? Более того, кто печатает код из среды, не терпящей масштабирования или других параметров форматирования? Когда в последний раз ваши знакомые были озадачены своей неспособностью отобразить строку из 100 символов? - person pcorcoran; 18.09.2008
comment
Почему люди печатают код в 2012 году? Это напоминает мне поход на технологическую конференцию, когда мне вручают сумку и распечатанную папку с презентациями. Это люди 21-го века: пришлите мне слайды по электронной почте, иначе этот пакет и папка отправятся прямо на свалку. - person Mark E. Haase; 16.12.2012
comment
так почему 80-1 лучше 80-0 или 80-2? - person n611x007; 12.12.2014
comment
в размерах по умолчанию Вы говорите? Расскажите мне подробнее об этих общепринятых размерах по умолчанию. - person Bruno Bronosky; 05.03.2015
comment
Да, давайте отдадим предпочтение тому, как этот код выглядит на бумаге, превыше всего остального. - person Jonathan; 09.07.2015

Вот почему мне нравится 80-символьный формат: на работе я использую Vim и работаю с двумя файлами одновременно на мониторе с разрешением, кажется, 1680x1040 (не могу вспомнить). Если строки длиннее, у меня возникают проблемы с чтением файлов, даже при использовании переноса слов. Излишне говорить, что я ненавижу иметь дело с чужим кодом, поскольку они любят длинные строки.

person Community    schedule 16.05.2009
comment
разве вы не используете vim для javascript/html? - person elad silver; 20.04.2018
comment
@eladsilver Я не могу понять, шутка ли это? :-D - person Steven Church; 24.08.2018
comment
извините, не очень хорошо разбираюсь в vim, очевидно, если вы работаете в Интернете, вы также используете его для html/js, и эти типы никогда не имеют ограничения в 80 символов, поскольку разработчики внешнего интерфейса не знают о pep8, поэтому ограничивайте python 80-символами не решит вашу проблему, если вы используете больше, чем только python. поэтому я спрашиваю, как вы справляетесь с другими языками кодирования? - person elad silver; 24.08.2018
comment
Я работаю в Vim со 120 строками символов. Я использую :diffthis с горизонтальным разделением. Если вы можете разместить только 160 символов на 1680 пикселей, у вас должен быть большой размер шрифта. - person NeilG; 26.07.2019

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

person Chris Upchurch    schedule 18.09.2008
comment
Большинство редакторов Python не используют мягкий перенос слов, потому что он создает двусмысленный трудный для чтения код на языке, где важны пробелы и отступы. - person Chris Upchurch; 18.09.2008
comment
Он не создает двусмысленного или трудночитаемого кода, если упаковка каким-то образом визуально идентифицируется. Кейт делает это, и это работает нормально. Если редактор не справляется с этим, то это причина сообщить редактору об ошибке, а не причина навязывать стиль кодирования, позволяющий избежать ошибки. - person Jim; 18.09.2008
comment
Даже если это указано визуально, это все равно делает код более трудным для чтения, поэтому редакторы Python обычно не поддерживают его. - person Chris Upchurch; 18.09.2008
comment
Вы действительно пробовали это в течение длительного периода времени? У меня есть. По моему опыту, это не усложняет чтение кода. Можете ли вы подтвердить утверждение, что именно поэтому редакторы Python не включают эту функцию? Я никогда раньше не слышал такого утверждения. - person Jim; 18.09.2008

Я согласен с Джастином. Чтобы уточнить, слишком длинные строки кода труднее читать людям, и у некоторых людей ширина консоли может вмещать только 80 символов в строке.

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

person readonly    schedule 18.09.2008
comment
Это ленивый аргумент. Не всегда 80 строк вредят читабельности. Беглый взгляд на любую умеренно сложную кодовую базу Python, которая занимает 80 строк, на самом деле демонстрирует обратное: перенос вызовов функций из одной строки в несколько строк затрудняет отслеживание происходящего WTF. - person Jonathan; 14.03.2015

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

person Stefano Borini    schedule 19.04.2009
comment
-1, я не думаю, что вы можете категорически сказать, что любая строка за границей 80 символов требует рефакторинга. Методы класса уже имеют двойной отступ, добавьте еще один отступ для if и т. д. и простое понимание списка, и довольно легко пересечь границу в 80 символов. - person ; 04.04.2011
comment
Не говоря уже о том, что если вы называете символы таким образом, чтобы они были удобочитаемыми для человека, например. users_directed_graph вместо usr_dir_gph, то даже простое выражение будет занимать довольно много символов в строке. - person Mark E. Haase; 16.12.2012
comment
Я всегда находил в Python, что если я превышаю 80 символов, разумно остановиться и подумать, почему это так. Обычно виновато неудачное дизайнерское решение. - person Mike Vella; 10.08.2013
comment
Это был и мой опыт. Он также касается более длинных имен переменных, как указывает @mehaase, но я думаю, что это преимущество. Доступные комбинации трех последовательных слов (в случае users_directed_graph) затмевают количество компонентов, которые разумно помещаются в одно пространство имен. Я считаю, что написанный мной старый код, в котором много одинаковых длинных имен переменных находятся в одном и том же пространстве имен, труднее читать и, как правило, лучше подвергать рефакторингу. - person TimClifford; 26.11.2014
comment
В языке, который требует отступов для каждого изменения области видимости, заявление о том, что 80 строк символов приравниваются к сложности, является чрезмерно упрощенным аргументом. Иногда для вызова функции достаточно 80 символов. Современные IDE/редакторы для других языков достаточно умны, чтобы распознать это и определить, когда нужно обернуть текст, а не накладывать общие ограничения на все, что в целом ухудшает читаемость. - person Jonathan; 14.03.2015
comment
Это серьезное заблуждение. Это хорошая причина сделать паузу, когда код превышает 79 символов, но это не обязательно означает, что он слишком длинный и сложный и не требует рефакторинга. - person edwinksl; 30.07.2016
comment
Насколько я помню, первоначальная причина 79 символов была частично связана со старыми школьными компьютерами / командной строкой / командной строкой, имеющей длину только 79 символов. В тот момент, когда вы превысили количество символов, вы сформировали новую строку и, таким образом, сделали ее нечитаемой. Это уже не так, просто выглядит красивее. - person SirJames; 08.02.2017