Python: використання 4 пробілів для відступу. Чому? [зачинено]


77

Під час кодування python я використовую лише 2 пробіли для відступу, впевнений, PEP-8 справді рекомендує мати 4 пробіли, але історично для мене це незвично.

Отже, хтось може переконати мене використовувати 4 пробіли замість 2? Які плюси і мінуси?

PS І нарешті, який простий спосіб перетворити всю існуючу кодову базу з 2 пробілів в 4 пробіли?


PPS PEP-8 Також суворо рекомендуємо не використовувати вкладки для відступу. читайте тут


Отже, підсумовуємо:

Плюси:

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

Мінуси:

  • З глибшим рівнем вкладених операторів у вас менше місця для фактичного коду.

Дякую.


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

@MitMaro: Я згоден, що це вкрай суб'єктивно; хоча варто зазначити, що частина PS - це слушне питання.
DrAl

@AI: Це мали бути два окремі запитання
MitMaro

3
Це дуже суб’єктивно та питання думки. Звичайно, правильна думка (;)) полягає в тому, що кожен повинен користуватися вкладками, щоб вони могли просторувати речі, як їм заманеться, за допомогою уподобань редактора.
Квентін

19
Я не бачу жодної причини закривати це питання. Він задає законне запитання щодо програмування, оскільки програми мають бути ПРОЧИТАНИМИ, а також написаними. А суб’єктивність не робить це менш важливим.
Daniel C. Sobral

Відповіді:


127

Всі інші використовують 4 пробіли. Це єдина причина використовувати 4 пробіли, які я натрапив і прийняв. У глибині душі я все ще хочу використовувати вкладки (1 відступ на відступ, це має сенс, ні? Окремий відступ від іншого пробілу. Мені все одно, що вкладки можуть відображатися у різній ширині, це не робить ніякої синтаксичної різниці. Найгірше може статися так, що деякі коментарі не збігаються. Жах!), але я визнав, що, оскільки спільнота python в цілому використовує 4 пробіли, я використовую 4 пробіли. Таким чином, я можу зібрати код із фрагментів, написаних іншими, і все це працює.


29
"Таким чином, я можу зібрати код із фрагментів, написаних іншими, і все це працює ..." І це виглядає і відчувається як мій код :)
xtofl

17
Багато людей на цю тему стверджують, що вкладки є Єдиним справжнім рішенням, тому що ви можете встановити їх на будь-яку бажану ширину ... це чудово, доки рядки продовження в кінцевому підсумку не розігруватимуться повсюдно через нові способи вкладок підрахували, або ваші права поля переповнюються ... Я мав справу з тонною цього в минулому році в успадкованому коді іншими мовами, і це змушує мене обожнювати час, який я витрачаю, повертаючись до загалом досить рівномірно відступів Python.
zigg

2
Я не пов'язаний з Sublime Text (за винятком того, що придбав ліцензію ще деякий час назад), але я вважаю, що дуже корисно встановлювати власні налаштування 'tab_size' = 4лише для python та за замовчуванням 'tab_size' = 2для інших мов (наприклад, JavaScript тощо).
Антоній,

2
Я не можу бути більше з тобою @Markus :) Прийняття статусу кво, коли різниця в кінцевому підсумку досить мінімальна, це те, що підводить межу до педантичності.
Micha Mazaheri

1
"Найпоширенішим запитанням для початківців є:" Скільки пробілів слід відступити? "Відповідно до офіційного посібника стилю Python (PEP 8), ви повинні робити відступи з 4 пробілами. (Цікавий факт: внутрішня інструкція Google щодо стилю диктує відступ на 2 пробіли! ) "- developers.google.com/edu/python/introduction?csw=1#indentation
Майкл

75

Мені подобається той факт, що чотири пробілові символи красиво відступають внутрішній код функції, оскільки def + один пробіл робить чотири символи.

def·foo():
····pass

23
І мені подобається той факт, що три пробільні символи красиво відступають внутрішній код ifвисловлення, оскільки if+ один пробіл робить три символи.
Олександр Шукаєв

54

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

Вкладки явно кращі:

  • Це майже неможливо мати невідповідні відступи (я бачив код, який зазвичай має 4 пробіли, але тоді деякі частини трапляються на один пробіл, важко визначити простим оглядом, чи є 7 або 8 пробілів ... з вкладками не відбудеться, якщо ви не встановите для пропуску вкладку 1 пробіл).
  • Tab - це логічне семантичне подання для відступу, воно дозволяє вам (і будь-якому іншому розробнику) вибрати відображення скільки завгодно "пробілів" (вірніше стовпців), не возившись із уподобаннями інших людей.
  • Також менше натискань на клавіші, якщо під рукою є лише "блокнот" (або інший фіктивний редактор).
  • Додавання та видалення вкладок - це симетрична операція. Більшість IDE можуть автоматично вставляти 4 пробіли при натисканні клавіші табуляції, але зазвичай вони видаляють лише 1 пробіл при натисканні на зворотний простір (операція з відступами все ще доступна як табуляція shift, але це дві комбінації клавіш), або ви натискаєте мишу, щоб клацнути посередині відступу та видаліть один символ.
  • Вони займають лише 1 байт, а не 4 (помножте на тисячі рядків, і ви заощадите кілька КБ!: P)
  • У вас є одна річ менше для врегулювання угоди, тому що якщо ви вирішите піти на простір, тоді обговорення починається знову, щоб вибрати, скільки (хоча консенсус, здається, становить близько чотирьох).

Переваги просторів:

  • Вони подобаються Гвідо.
  • Тут неможливо легко ввести вкладку, вона переносить фокус (хоча її можна вставити).

2
Мені подобається, як ви сказали, що це переносить фокус.
Гіббс,

17

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

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

Крім цього, використовуйте те, що подобається вашій групі. Це як шоколад проти ванілі.

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

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


Ми зробили те саме в Emacs. Таким чином програмісти могли бачити віддалений їм інтервал, не примушуючи його до решти групи.
Kelly S. French

14

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


1
Домовились. Складіть власну угоду для вашого коду. Я використовую 2 пробіли скрізь, незалежно від мови, тому для мене весь мій код узгоджений. Візьміть із вказівками щодо стилю чужорідного коду, наприклад, PEP, і адаптуйте їх під свої потреби. 4 пробіли на відступ - це німійне марнотратство горизонтального простору, і ті, хто це винайшов, повинні піти купити всі монітори з найвищою роздільною здатністю, якщо їм так подобається ця конвенція.
Олександр Шукаєв

7

Будь-який гідний редактор (emacs, vim) абстрагує вам цілу нісенітницю. Він однаково добре працюватиме з пробілами чи вкладками, і його можна налаштувати на використання будь-якої кількості пробілів (або будь-якої кількості ширини пробілу для символу табуляції). Він також може конвертувати між різними форматами без особливих проблем (див:retab Команду у vim).

Якщо ви намагаєтеся перетворити вихідне форматування в масовому режимі, я рекомендую вам поглянути на утиліту відступу .

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


6

Також однією з причин є: коли у вас є довгий рядок (довший за 80 символів) і ви хочете розділити його на 2, у вас буде лише 1 пробіл для відступу, це трохи заплутано:

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
 and someotherstatementhere:
  # some code inside if block
  pass

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
  and someotherstatementhere:
    # some code inside if block
    pass

7
Ви не повинні цього робити. Якщо ваш відступ складає 4 пробіли, ви ніколи не повинні мати відступів менше цього. На мою думку, рядок "і" має бути з відступом ще на два рівні, ніж рядок "якщо".
TimK

5

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

Щоб внести зміни, вам просто потрібно змінити всі пробіли початку рядка на такі, що вдвічі більші. Існує багато способів зробити це; у текстовому редакторі Vim я можу думати про два: по-перше:

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)

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

vim *.py

(або еквівалент), за яким слідує (не перевірено):

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w

Або:

" Switch to hard tabs:
:set noexpandtab
" Set the tab stop to the current setting
:set tabstop=2
" Change all spaces to tabs based on tabstop
:retab!
" Change the tab stop to the new setting
:set tabstop=4
" Go back to soft tabs
:set expandtab
" Replace all the tabs in the current file to spaces
:retab

Звичайно, багато інших інструментів будуть пропонувати аналогічні функції: Я був би здивований , якщо що - щось подібне sed, awk, perlабо pythonне може зробити це дуже легко.


3

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

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

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

Що стосується зміни розміру вкладки, існує безліч форматорів вихідного коду, які підтримують Python, і більшість редакторів та IDE програмістів також мають цю можливість. У вас це, мабуть, уже є, це просто питання ознайомлення з документацією для редактора, який ви використовуєте.


1

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

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


1

Візуально ідентифікувати довгі вкладені блоки коду з 4 пробілами простіше. Економія часу при налагодженні.


Домовились. Для такої мови, як C, я б скоріше використав дві, насправді, але в C візуальна підказка, надана відступами, менш важлива, ніж у Python.
user1071847

1

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


0

використання 4 пробілів або 2 пробілів залежить виключно від вас. 4 пробіли - це просто умовність. Найголовніше, не змішуйте вкладки та пробіли. Використовуйте пробіл

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.