Чому Python pep-8 настійно рекомендує пробіли над вкладками для відступу?


146

Я бачу в Stack Overflow і PEP 8, що рекомендується використовувати пробіли лише для відступу в програмах Python. Я можу зрозуміти необхідність послідовного відступу, і я відчув цей біль.

Чи є основна причина переваги пробілів? Я б подумав, що з вкладками працювати набагато простіше.


7
Прочитайте дискусію PEP, щоб знати.
e-satis

106
1 рівень відступів є ... 1. Цілком нелогічно домовлятися про використання N пробілів, коли ви могли використовувати одну вкладку. Що, до речі, саме призначене для цього. Відступ. Раз. 1 рівень відступу = 1 один символ, тобто 1 одна вкладка. І вони зручніші, оскільки кожен кодер може вільно обирати, як його візуалізувати. Використання пробілів - німе, я ніколи не бачив жодного аргументу, який би не був дурним.
o0 '.

31
@BlueBomber і чому ти не змушуєш людей мати розмір шрифту та кольорову схему, яка тобі подобається, поки ти на це? Ще дурний.
o0 '.

10
@BlueBomber ні, ні, це ТОЧНО на тому самому рівні абсурду.
o0 '.

9
@BlueBomber У чому саме різниця? Ви зменшуєте ступінь свободи в налаштуваннях іншого середовища розробника, не досягаючи помітних переваг. Якщо ви хочете бути диктатором і змусити всіх подивитися на код з відступом, що відповідає 2 або 4 або 29 пробілам, ви все одно можете це зробити за допомогою вкладок. Просто попросіть своїх підлеглих встановити їх IDE для відображення вкладок, відповідних бажаній кількості пробілів. Якщо ви не маєте повноважень на це, ви можете дозволити їм вирішити, наскільки широка одиниця відступу зручна для їх очей.
Асад Саедюддін

Відповіді:


111

Відповідь була надана прямо там, в PEP [ред .: цей уривок був відредагований у 2013 році ]. Цитую:

Найпопулярніший спосіб відступу Python це тільки з пробілами.

Яка ще основна причина вам потрібна?

Якщо говорити менш прямо: Розгляньте також сферу застосування ПЕП, як зазначено в першому абзаці:

Цей документ дає умови кодування для коду Python, що включає стандартну бібліотеку в головному дистрибутиві Python.

Намір полягає в тому, щоб весь код, який надходить в офіційний дистрибутив python, послідовно відформатований (я сподіваюся, що ми можемо погодитися, що це в цілому Good Thing ™).

Оскільки рішення між пробілами та вкладками для окремого програміста - це а) справді справа смаку і б) легко вирішується технічними засобами (редакторами, сценаріями перетворення тощо), існує чіткий спосіб закінчити всю дискусію: вибрати один .

Гвідо вибирав. Він навіть не повинен був наводити причину, але все-таки це зробив, посилаючись на емпіричні дані.

Для всіх інших цілей ви можете прийняти цей ПЕП як рекомендацію, або можете проігнорувати його - на ваш вибір, або вашу команду, або ваших керівників.

Але якщо я можу дати вам одну пораду: не mix'em ;-) [ред .: Змішування вкладок і пробілів більше не є можливим.]


11
Домовились. Послідовність важливіша, ніж вкладки проти пробілів X та пробіли Y.
Майк Кларк

10
змушує мене замислитися ... чому стандартна бібліотека має стільки назв методів змішаної каси?
Kyle Wild

6
@dorkitude: а) ніхто не ідеальний. б) історичні причини.

8
То чому ж так багато програмістів вирішили використовувати пробіли перед PEP-8? Це те, що я дуже хочу знати. Переваги вкладок здаються мені очевидними, але не пробілами.
einnocent


95

Ну добре, здається, що всі сильно упереджені до простору. Я використовую виключно вкладки. Я дуже добре знаю, чому.

Вкладки - це класний винахід, який з’явився після пробілів. Це дозволяє робити відступи, не висуваючи пробіл мільйони разів або використовуючи підроблену вкладку (яка створює пробіли).

Я дійсно не розумію, чому всі дискримінують використання вкладок. Це дуже схоже на те, що старі люди дискримінують молодих людей за те, що вони обирають новіші ефективніші технології та скаржаться, що імпульсний набір працює на кожному телефоні , а не тільки на цих фантазійних нових. "Тоновий набір працює не на кожному телефоні, тому це неправильно".

Ваш редактор не може правильно обробляти вкладки? Ну, знайдіть сучасного редактора. Можливо, проклятий час, ми зараз у 21 столітті, а час, коли редактор був високотехнологічним складним програмним забезпеченням, давно минув. Зараз у нас є набір тонн і тонн редакторів, і всі вони підтримують вкладки. Крім того, ви можете визначити, скільки має бути вкладка - річ, яку ви не можете зробити з пробілами. Не вдається побачити вкладки? Що це за аргумент? Ну, і пробілів ви не бачите!

Чи можу я настільки сміливо запропонувати отримати кращого редактора? Один із цих високотехнологічних, які були випущені вже десь 10 років тому, що демонструють невидимі символи ? (сарказм відключений)

Використання пробілів призводить до набагато більше роботи над видаленням та форматуванням. Ось чому (і всі інші люди, які це знають і згодні зі мною) використовують вкладки для Python.

Змішування вкладок і пробілів - це не-ні, і це ніякий аргумент. Це безлад і ніколи не може працювати.


26
Щоб додати до цього, погляньте на клавіатуру, символ клавіші TAB чітко відображає відступи - це ціль відступу клавіші, а не пробіл. PEP8 рекомендує використовувати пробіли - помилка IMHO, але це лише рекомендація - en.wikipedia.org/wiki/Tab_character#Tab_characters
Даніель Соколовський

29
Погоджений з цією публікацією повністю. Використання пробілів призначено для дурнів, які полюбляють потрапляти на ці помилки з відступом на 1 пробіл. Якщо ваш відступ було відмінено на 1 вкладці, я гарантую, що ви це помітите.
Сеперо

12
@ Zingham Ніхто не може використовувати вкладки виключно: вкладки та пробіли завжди використовуються в поєднанні, і це призводить до невідповідності. Я і тисячі інших використовую їх досить послідовно щодня. Вкладки для відступу, пробіли для вирівнювання. Точно, яку частину цієї концепції вам здається так важко зрозуміти, і чому ви переконані, що не можна послідовно її застосовувати?
antred

1
Справжня проблема з вкладками полягає в тому, що ви не можете отримати точне відмінювання символу, рекомендоване тим самим PEP8 під коментарем "# Вирівняне з роздільником для відкриття". Це лише причина переваги пробілів: щоб виправлення було правильним!
користувач541905

2
Питання "Чому Python pep-8 настійно рекомендує пробіли над вкладками для відступу?" . Ця відповідь ніколи нічого не згадує про PEP8. ||| Замість того, щоб намагатися відповісти на запитання ... ця відповідь наштовхується на мене як на одну величезну поблажливу, насамперед, думку . Є 276 слів, які використовуються, щоб сказати "вкладки кращі за пробіли, і ось чому ...".
Тревор Бойд Сміт

43

Я особисто не згоден з пробілами у вкладках. Для мене вкладки є символом / механізмом компонування документа, тоді як пробіли призначені для вмісту або розмежування між командами у разі коду.

Я маю згоду з коментарями Джима, що вкладки насправді не є проблемою, це люди та те, як вони хочуть змішувати вкладки та пробіли.

Це означає, що я змусив себе використовувати пробіли заради конвенції. Я ціную послідовність щодо особистих уподобань.


3
Я намагався змусити себе також використовувати пробіли, але мудрі вкладки редактора (принаймні Eclipse + PyDev) виграють, особливо якщо ви включите показ невидимих ​​символів. І я можу легко встановити вкладки на 4, 8, 6 пробілів візуально. Тож у своєму коді я принаймні ціную особисті переваги і дотримуюся пробілів, якщо це встановлена ​​умова в існуючій кодовій базі.
Данило Соколовський

2
Це добре, якщо ви не кодуєте в команді. Після того, як ви в команді, ви домовляєтесь про єдину конвенцію і дотримуєтесь її.
Радянський

1
@Soviut Це, здається, здебільшого схоже на бажане мислення. У всіх колективах, в яких я коли-небудь був, офіційною партійною лінією було "використовувати пробіли". Реальність полягала в тому, що практично кожен файл був тотальним безладом і вкладок, і пробілів, і навіть у файлах, які послідовно використовували лише пробіли чи лише вкладки, відступ все ще був повсюдно.
антред

Так, але це я мав на увазі. Зрештою, досягнуто і застосовується певна консенсус. Як ви сказали, зазвичай це "просто використовувати пробіли".
Радянський

це головна причина, чому я віддаю перевагу вкладкам. Просто має сенс мати окремі символи для розмітки та розмежування слів
woojoo666

31

Причиною пробілів є те, що вкладки необов’язкові. Пробіли є фактичним найменшим загальним знаменником у пунктуації.

У кожному гідному текстовому редакторі є "замінити вкладки пробілами", і багато людей використовують це. Але не завжди.

Хоча деякі текстові редактори можуть замінити пробіл на вкладці, це дійсно рідко.

Підсумок . Ви не можете помилитися з пробілами. Ви могли б піти не так з закладками. Тому не використовуйте вкладки і зменшуйте ризик помилок.


15
Я б ніколи не обіцяв зробити щось не так, тому що багато інших (люди, текстові редактори тощо) також трапляються не так. У 2015 році текстовий редактор, який не добре обробляє вкладки, належить до сміттєвого бака.
antred

2
"Ви не можете помилитися з пробілами. Ви можете помилитися з вкладками". Я виявив, що це на 100% неправильно сприйняття зубців. На моєму досвіді: "Ви не можете помилитися з Tabs. Ви можете помилитися з пробілами" ... особливо коли код спільного доступу.
cmroanirgo

5
Отже, хтось нарешті сказав це: використовуйте пробіли, оскільки це найнижчий загальний знаменник. Це ж правило дозволило нам дотримуватися форм MBR, BIOS та паперових форм у державних установах. За винятком того, що вони насправді мають концептуальні проблеми, тоді як вкладки проти пробілів - це 100% дурна проблема користувачів.
Milind R

1
Мені це здається Argumentum ad populum: помилковий аргумент, який робить висновок про те, що судження є правдивим, тому що багато чи більшість людей вірять у це. Оскільки кожен редактор може замінити вкладки пробілами, то пробіли - це правильний вибір - це помилка !!
Джунзу

28

Проблема з вкладками полягає в тому, що вони невидимі, і люди ніколи не можуть домовитися про ширину вкладок. Коли ви змішуєте вкладки та пробіли та встановлюєте табло у щось інше, ніж Python (який використовує табуляції кожні 8 пробілів), ви побачите код у іншому макеті, ніж бачить Python. А оскільки макет визначає блоки, ви побачите різну логіку. Це призводить до тонких помилок.

Якщо ви наполягаєте на забороні PEP 8 та використанні вкладок - або, що ще гірше, змішування вкладок та пробілів - принаймні завжди запустіть python аргументом '-tt', що робить непослідовним відступ (іноді вкладка, іноді пробіл для того ж відступу рівень) помилка. Також, якщо можливо, встановіть редактору відображення вкладок по-іншому. Але дійсно, найкращий підхід - це не використовувати вкладки, період.


43
Це правда, що вкладки невидимі, і люди не можуть домовитися про ширину вкладок. Але те саме стосується і пробілів. Коли ви змішуєте вкладки та пробіли, справи йдуть не так. Але чому ви звинувачуєте цю ситуацію на вкладках, а не пробілах?
Джим,

47
Ні, те ж саме не стосується пробілів. Люди можуть домовитися про ширину пробілів.
Rafał Dowgird

32
Один простір завжди може бути однакової ширини, але відступ з пробілами - це не завжди однакова ширина. Я не бачу, як погоджуватися використовувати вкладки n пробілів по-різному, ніж погодитися на відступ з n пробілами.
Джим,

26
Так, я знаю, що проблеми зі змішуванням двох можуть викликати. Я не розумію, чому деякі люди звинувачують це у вкладках. Проблема полягає в їх змішуванні, а не вкладках. Ви можете вирішити проблему, замінивши вкладки пробілами, але ви також могли вирішити проблему, замінивши пробіли вкладками.
Джим,

70
І ні, якщо я використовую 8-ти широкі вкладки, а ви використовуєте 6-широкі вкладки, і ми ділимось кодом, він не зіпсується. Це все лише одна вкладка інтерпретатора Python.
Джим

22

Основні проблеми з відступом виникають при змішуванні вкладок та пробілів. Очевидно, це не говорить вам, що вам слід вибрати, але це вагомий привід рекомендувати його, навіть якщо ви виберете його, перегортаючи монету.

Однак у IMHO є кілька незначних причин віддати перевагу пробілам у вкладках:

  • Різні інструменти. Іноді код відображається поза редактором програміста. Напр. розміщено в групі новин або на форумі. Простори тут краще, ніж вкладки - скрізь, де пробіли будуть забруднені, вкладки так само, але не навпаки.

  • Програмісти бачать джерело по-різному. Це глибоко суб'єктивно - це або основна перевага вкладок, або причина уникати їх залежно від того, на якій стороні ви знаходитесь. З іншого боку, розробники можуть переглядати джерело з бажаним відступом, тому розробник, який надає перевагу двосторонній відступ, може працювати з 8-пробільним розробником у тому самому джерелі і все ще бачити його, як їм подобається. Мінус полягає в тому, що на це є наслідки - деяким людям подобається 8-пробіл, оскільки він дає дуже видимі відгуки про те, що вони занадто глибоко вкладені - вони можуть побачити код, перевірений 2-інденторним постійно вбирається у свій редактор. Якщо кожен розробник бачить код однаково, це призводить до більшої узгодженості довжини рядків Wrt та інших питань.

  • Продовження відступу рядка Іноді потрібно відступити рядок, щоб вказати, що він перенесений з попереднього. напр.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    Якщо ви користуєтеся вкладками, немає можливості вирівняти це для людей, які використовують різні таблички в своєму редакторі без змішування пробілів та вкладок. Це ефективно знищує вищевказану користь.

Очевидно, що це глибоко релігійне питання, яке програмує. Найголовніше питання полягає в тому, що ми повинні вибрати одне - навіть якщо це не той, кому ви віддаєте перевагу. Іноді я думаю, що найбільшою перевагою суттєвого відступу є те, що принаймні ми не шкодуємо пламенних пластівців.

Також варто прочитати цю статтю Джеймі Завінського з цього питання.


3
Хоча вирівнювання є тривіальним. Я просто використовую дужки як блок і відступаю кожен аргумент. Крім того, у своєму прикладі ви дуже добре можете використовувати пробіли, оскільки ви знаходитесь у списку аргументів, і ви можете скласти стільки пробілів, скільки хочете.
Радянський

3
@Soviut: Якщо ви маєте відступ з пробілами, вирівнювання буде зіпсовано, як тільки воно переглядається з іншим розміром вкладки. Єдиний спосіб зберегти це - використовувати вкладки до рівня відступу, а потім пробіли для решти, тобто змішати пробіли та вкладки, що призводить до власних проблем.
Брайан

Так, саме тому я, як правило, просто використовую питонну конвенцію про відступ блоку на моїх аргументах. Звичайно, вони можуть не вирівнятися з відкритою дужкою, але все одно зрозуміло, до якої лінії чи команди вони належать. Синтаксис JQuery працює за аналогічним принципом.
Радянський

2
@Brian: Я не бачу, як це призводить до будь-яких проблем. Це абсолютно правильний шлях, вкладки для відступу, пробіли для вирівнювання. Це зовсім не те саме, що змішувати пробіли та вкладки для відступу .
antred

1
@CoreDumpError Ні, це точно не так. Я це знаю, оскільки Python 3 ніколи не скаржиться ні на один із моїх сценаріїв, і я використовую вкладки для відступу / пробілів, щоб вирівняти весь проклятий час. Крім того, PEP8 нічого не може "заборонити", оскільки це лише рекомендація (і, на мою думку, є найголовнішою).
antred

12

Зауважте, що використання вкладок плутає ще один аспект PEP 8:

Обмежте всі рядки до максимум 79 символів.

Скажімо, гіпотетично, що ви використовуєте вкладку шириною 2, а я використовую ширину вкладки 8. Ви пишете весь свій код, щоб ваші найдовші рядки досягали 79 символів, тоді я починаю працювати над вашим файлом. Тепер у мене є важкий для читання код, оскільки (як заявляє PEP):

Обертання за замовчуванням у більшості інструментів порушує візуальну структуру коду

Якщо ми всі використовуємо 4 пробіли, ВЖЕ завжди те саме. Кожен, редактор якого може підтримувати ширину 80 символів, може з комфортом читати код. Примітка: межа 80 символів - це сама по собі війна, тому не давайте цього починати тут.

Будь-який невдалий редактор повинен мати можливість використовувати пробіли, як якщо б вони були вкладками (як вставлення, так і видалення), так що насправді не повинно бути дійсним аргументом.


7

Відповідь на питання: PEP-8 хоче дати рекомендацію, і вирішив, що оскільки пробіли є більш популярними, він настійно рекомендує пробіли над вкладками.


Примітки до PEP-8

PEP-8 говорить: "Використовуйте 4 пробіли на рівень відступу".
Зрозуміло, що це стандартна рекомендація.

"Для дійсно старого коду, який ви не хочете псувати, ви можете продовжувати використовувати 8-пробільні вкладки."
Зрозуміло, що деякі вкладки можуть використовуватися вкладками.

"Ніколи не змішуйте вкладки та пробіли."
Це явна заборона змішування - я думаю, що ми з цим усі погоджуємось. Python може виявити це і часто задихається. Використання аргументу -tt робить це явною помилкою.

"Найпопулярніший спосіб відступу Python - це лише пробіли. Другий за популярністю спосіб - лише за допомогою вкладок. "
Це чітко говорить про те, що обидва використовуються. Щоб бути надзвичайно зрозумілим: ви ніколи не повинні змішувати пробіли та вкладки в одному файлі.

"Для нових проектів настійно рекомендується використовувати лише пробіли на вкладках."
Це чітка рекомендація і настійна, але не заборона вкладок.


Я не можу знайти хорошої відповіді на власне запитання в PEP-8. Я використовую вкладки, які я історично використовував іншими мовами. Python приймає джерело з ексклюзивним використанням вкладок. Це досить добре для мене.

Я думав, що мені вдасться працювати з просторами. У своєму редакторі я налаштував тип файлу, щоб використовувати виключно пробіли, і тому він вставляє 4 пробіли, якщо натискаю вкладку. Якщо я натискаю вкладку занадто багато разів, мені доведеться видалити пробіли! Аррх! У чотири рази більше видалень, ніж вкладок! Мій редактор не може сказати, що я використовую 4 пробіли для відступів (хоча редактор AN може це зробити), і очевидно наполягає на видаленні пробілів один за одним.

Не можна було сказати Python вважати вкладки n пробілами під час читання відступів? Якби ми могли домовитись про 4 пробіли на відступ і 4 пробіли на вкладці і дозволити Python прийняти це, то проблем не було б.
Ми повинні знайти безпрограшні рішення проблем.


1
Який редактор ви використовуєте? Більшість з яких я використовував є можливість виділяти на задній простір (наприклад, emacs поводиться таким чином), незалежно від реалізації відступу.
Брайан

Ви маєте рацію - я не бачу можливості виділяти на зворотній простір, але ви, ймовірно, можете впоратися з цим, використовуючи shift-tab або зменшити відступ (ctrl-shift-i за замовчуванням).
Брайан

Я просто намагаюся PyScripter, який здається, що завантаження краще використовувати пробіли, коли ви натискаєте вкладку та видаляєте їх у 4, коли ви натискаєте зворотну простір.
quamrana

28
"Я повинен видалити пробіли! Arrgh! У чотири рази більше видалень, ніж вкладки!" - Це єдина причина, що я використовую вкладки для всього, і чому я вважаю, що люди, які використовують пробіли, божевільні. :) У мене ніколи не було проблем, за винятком випадків, коли я вставляв щось із Інтернету, який використовує пробіли. Тоді просте знаходження-заміна виправляє це.
Афекс

3

Я завжди використовував вкладки у своєму коді. Отож, нещодавно я знайшов причину використовувати пробіли: коли розробляв свій Інтернет-планшет Nokia N900, у мене зараз була клавіатура без клавіші вкладки. Це змусило мене або копіювати, і вставляти вкладки, або переписувати код з пробілами. У мене виникли ті ж проблеми з іншими телефонами. Зрозуміло, це не стандартне використання Python, а щось, про що слід пам’ятати.


2

JWZ каже, що найкраще :

Коли [люди] читають код, і коли вони закінчують писати новий код, вони піклуються про те, скільки стовпців на екрані, на який код має тенденцію відступати, коли відкриється нова область (або sexpr, або будь-яке інше) ...

... Я вважаю, що найкращий спосіб вирішити технічні проблеми - це дозволити, щоб символ ASCII # 9 TAB ніколи не з'являвся в дискових файлах: запрограмуйте свій редактор для розширення таблиць TAB на відповідну кількість пробілів перед записом рядків на диск. ..

... Це передбачає, що ви ніколи не використовуєте вкладки в місцях, де вони насправді значущі, як, наприклад, в рядкових або символьних константах, але я цього ніколи не роблю: коли важливо, що це вкладка, я завжди використовую замість '\ t'.


10
Я б зробив навпаки: вкладки мають семантичне значення для відступу, тому більш відчутним є збереження вкладок та пробілів. Користувач міг обрати стиль форматування, і редактор відповідно розширить вкладки.
AkiRoss

1
У вас все ще виникає проблема змішаних вкладок і пробілів, а також один автор, який використовує 1 стовпець на вкладку і відступ 4+ разів, що буде виглядати божевільним у текстовому редакторі, щоб відображати кожен символ вкладки в ширину 4 стовпців. Вкладки для відступу мають найбільш сенс у текстовому редакторі змінної ширини, як текстовий процесор, використовуючи пропорційно розташовані шрифти. Не так багато з текстовим редактором фіксованої ширини.
Марк Сідаде

2
Ні, я мав на увазі, що текстовий редактор повинен мати можливість аналізувати граматику мови та розуміти, коли відбувається таблиця, щоб вкладки можна було використовувати лише як середнє форматування, і не було б необхідності використовувати пробіли для відступу. "Вкладка" не повинна мати фіксовану ширину, і я вважаю загалом ганебним, що з сьогоднішніми методами (наприклад, машинним навчанням) форматування все ще є проблемою для програмістів. Все має бути автоматизовано, і воно повинно бути автоматизованим і прозорим.
AkiRoss

Я не бачу, як це можна було б зрозуміти.
Марк Сідаде

1

Оскільки python покладається на відступ для того, щоб розпізнати структуру програми, потрібен чіткий спосіб визначення ідентифікації. Це причина вибору пробілів або вкладок.

Однак у python також є сильна філософія, що існує лише один спосіб робити речі, тому має бути офіційна рекомендація щодо одного способу здійснення відступу.

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


8
А оскільки кожен редактор також може обрати свою колірну гамму, чи вважаєте ви, що вони також повинні доручити, яку кольорову схему використовувати?
o0 '.

8
Так, але чи не має ця непослідовність насправді більше сенсу? Тому що це просто питання зорових уподобань. Якщо я віддаю перевагу більшому "вигляду" відступу в моєму редакторі, я можу встановити, що мої вкладки становлять 8 пробілів, якщо я віддаю перевагу менше, я можу встановити його на 2. Таким чином, код, не змінюючи фактично форматування, краще підходить особі, яка є спостерігаючи за цим.
dennmat

8
Я погоджуюся з dennmat- Якщо я візуально віддаю перевагу 2 пробілу, а Guido візуально віддає перевагу 4 пробілам, то логічним вибором є використання відступу вкладки.
Сеперо

0

Найбільш істотною перевагою, яку я можу сказати про пробіли на вкладках, є те, що багато програмістів і проектів використовують задану кількість стовпців для вихідного коду, і якщо хтось здійснить зміни, встановивши їх на 2 пробіли, і проект використовує 4 пробіли як довгі рядки на вкладці довгі рядки будуть занадто довгими для вікна редактора інших людей. Я погоджуюся, що з вкладками простіше працювати, але я думаю, що простори простіші для співпраці, що важливо для великого проекту з відкритим кодом, наприклад, Python.


2
це неправильно: це відбувається лише в тому випадку, якщо ви змішуєте вкладки та пробіли, і ви б однаково вирішили це, змусивши всіх використовувати вкладки замість пробілів.
o0 '.

0

Ви можете мати свій торт і з'їсти його. Встановіть редактор, щоб автоматично розгортати вкладки на пробіли.

(Це було б :set expandtabу Вім.)


0

Думаю, що більшість текстових редакторів Linux за замовчуванням виглядають смішно великими. Я не можу придумати жодної іншої вагомої причини використовувати пробіли над вкладками.


-1

Окрім усіх інших причин, які вже були названі (послідовність, ніколи не змішування пробілів і вкладок тощо), я вважаю, що для конвенції 4 простору слід зазначити ще кілька причин. Вони стосуються лише Python (і, можливо, інших мов, де відступ має значення). Вкладки можуть бути приємнішими для інших мов, залежно від індивідуальних переваг.

  1. Якщо редактор не показує вкладки (що трапляється, залежно від конфігурації, зовсім небагато), інший автор може припустити, що ваш код використовує 4 пробіли, оскільки майже весь код Python є загальнодоступним; якщо у того самого редактора буде ширина вкладки 4, можуть трапитися неприємні речі - принаймні, ця бідна людина втратить час на проблему відступу, якої було б дуже просто уникнути, дотримуючись конвенції. Тож для мене причина номер один - уникати помилок з послідовністю.

  2. Перефразовуючи питання, що краще, вкладки чи пробіли, слід запитати, які переваги вкладки; Я бачив безліч публікацій, які вихваляють вкладки, але мало вагомих аргументів для них; хороші редактори, такі як emacs, vi (m), kate, ... роблять належні відступи залежно від семантики вашого коду - навіть без вкладок; ті ж редактори можуть бути легко налаштовані на відключення на задній простір тощо.

  3. Деякі люди мають дуже сильні переваги, коли справа стосується їхньої свободи у вирішенні вигляду / компонування коду; інші цінують послідовність щодо цієї свободи. Python різко зменшує цю свободу, диктуючи, що відступи використовуються для блоків і т. Д. Це може розглядатися як помилка або особливість, але це на зразок вибору Python. Особисто мені подобається ця послідовність - коли починаю кодувати новий проект, принаймні макет близький до того, до якого я звик, тому читати досить легко. Майже завжди.

  4. Використання пробілів для відступу дозволяє "хитрощі компонування", які можуть полегшити розуміння коду; деякі приклади перелічених у PEP8; напр.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    Звичайно, вищесказане також можна красиво записати як

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    Однак останній займає більше рядків коду, і менше рядків іноді стверджується, що вони краще (b / c ви отримуєте більше на одному екрані). Але якщо вам подобається вирівнювання, пробіли (бажано за допомогою хорошого редактора) дають у певному сенсі більше свободи в Python, ніж вкладки. [Ну, я думаю, деякі редактори дозволяють вам робити ті ж w / tabs;) - але з пробілами, всі вони роблять ...]

  5. Повертаючись до того ж аргументу, який висувають всі інші - PEP 8 диктує пробіли (добре, настійно рекомендує). Якщо ви підходите до проекту, який використовує лише вкладки, у вас, звичайно, вибору мало. Але через створення конвенцій PEP 8, майже всі програмісти Python звикли до цього стилю. Це робить Sooooo набагато простіше знайти консенсус щодо стилю, який приймається більшістю програмістів ... а якщо люди погоджуються щодо стилю, то в іншому випадку може бути дуже важко.

  6. Засоби, що допомагають виконувати стиль, зазвичай знають про PEP 8 без зайвих зусиль. Це не є чудовою причиною, але просто приємно, щоб все працювало ~ поза коробкою.


-3

Універсальна проблема вкладок полягає в тому, що вони можуть бути представлені по-різному в різних умовах.
У певному редакторі на вкладці може бути 8 пробілів, а може бути 2.
У деяких редакторах ви можете керувати цим, а в інших - не.

Інша проблема з вкладками полягає в тому, як вони представлені у друкованому випуску. Я вважаю, що більшість принтерів інтерпретують вкладку як 8 пробілів.

З пробілами немає сумнівів. Все вишикується так, як задумав автор.


14
Ще один, хто принципово неправильно зрозумів вкладку ... отримайте механічну машинку і пограйте з нею деякий час, справді! 1 вкладка не дорівнює 8 пробілам! це дорівнює просторам up_to_8_s ! otoh: з пропорційними шрифтами вкладки - це єдиний спосіб гарантувати вирівнювання.

3
"У даному редакторі на вкладці може бути 8 пробілів, а може бути 2". Якщо мені подобаються 4-пробіли, і моєму другові подобаються 8-пробіли, 2-пробіли, 3-пробіли або тощо. Тоді ми можемо домовитись про вкладки, оскільки (будучи виділеними символами відступу ) редактор знає, що вони є, і може їх відображати відповідно. Я бачу код з відступами на 4 пробіли, ви бачите його з відступами з 8 пробілів, наш дивний друг використовує свої 3 пробіли, і все круто. Обставини (особливо в Python!), Коли сама ширина вкладки коли-небудь матиме значення, настільки рідкісні, що навіть прихильники космосу рідко піднімають їх.
JamesTheAwesomeDude

-4

Про дискусію між Джимом та Томасом Вутерсом у коментарях.

Проблема полягала в тому, що ширина вкладок і пробілів може відрізнятися - і оскільки програмісти не можуть погодитись ні на одну ширину - чому саме вкладки несуть провину.

Я погоджуюся з Джимом з цього приводу - вкладки НЕ є злі самі по собі. Але є проблема ...

За допомогою пробілів я можу контролювати, як виглядає "МОЙ ВЛАСНИЙ КОД" у кожному редакторі світу. Якщо я використовую 4 пробіли - то незалежно від того, в якому редакторі ви відкриєте мій код, він буде мати однакову відстань від лівого поля. За допомогою вкладок я знаходжусь у налаштуваннях редактора для ширини вкладок - навіть для МОЯ ВЛАСНОГО КОДУ. І мені це не подобається.

Тож правда навіть те, що пробіли не можуть гарантувати послідовність - вони принаймні дозволяють вам більше контролювати зовнішній вигляд власного коду скрізь - те, що вкладки не можуть.

Я думаю, що це НЕ послідовність у програмістів написання коду, а послідовність редакторів, що показують цей код, - що пробіли полегшують досягнення (і накладення).


6
Ви "на розсуд налаштування ширини вкладки для редактора"? Якщо ваш редактор не дозволяє встановити потрібну вам ширину вкладки, можливо, ви використовуєте notepad.exe
user137369

4
@zigg Це абсолютно не має значення для аргументу, оскільки він (вона?) говорить конкретно про свій власний код (ця інформація є навіть напівжирною, курсивом та усіма великими літерами). Ніде для обговорення актуальний код спільного використання.
користувач137369

1
Редактори - не єдиний інструмент для перегляду коду. Існують також розрізнення, відстеження, Github та інші веб-сторінки, і т. Д., Які будуть вибирати якусь ширину вкладок поза вашим контролем (можливо, 8).
RemcoGerlich

Я бачу вашу думку. Ви дійсно контролюєте, як усі бачать ваш код (щодо відступу). Наступним кроком є ​​керування типом шрифту та кольором, які кожен використовуватиме для перегляду вашого коду. Після цього ви готові домінувати над самим світом, а не лише редакторами коду !!
Джунзу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.