Есть ли подводные камни в использовании пробелов в Python? - PullRequest
3 голосов
/ 12 марта 2009

В настоящее время у меня никогда не было проблем с пробелами в Python (хотя я использовал его только в двух проектах, и я был единственным программистом). Каковы некоторые потенциальные подводные камни с пробелами и отступами в Python для тех, кто изучает язык?

Ответы [ 17 ]

11 голосов
/ 12 марта 2009

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

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

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

10 голосов
/ 12 марта 2009

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

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

  1. работа с другими a.k.a. сотрудничество

    а. если у вас есть другие, которые по какой-либо причине отказываются придерживаться PEP 8 , то поддержание кода может стать проблемой. Я никогда не видел это на практике, когда я указываю на них, почти универсальное соглашение для python: уровень отступа == четыре пробела

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

  2. необходимость инвестировать в «приличного» редактора, отличного от вашего текущего предпочтительного, если ваш текущий предпочтительный редактор не дружественен по отношению к Python - на самом деле не подводный камень, а инвестиционные требования, которых следует избегать другие упомянутые подводные камни, связанные с копированием и вставкой, ре-факторингом и т. д., прекратят использовать Блокнот, и вы будете благодарны себе утром.

    а. Ваша эффективность в редактировании кода будет намного выше в редакторе, который понимает python

    б. большинство современных редакторов кода справляются с питоном прилично. Я сам предпочитаю GNU Emacs, и последние версии поставляются с отличной поддержкой python-mode из коробки. Существует множество других редакторов для изучения , включая множество бесплатных альтернатив и IDE .

    с. Сам Python выходит из коробки с «умным» редактором Python, idle. Проверьте его, если вы не знакомы, так как он, вероятно, уже доступен с вашей установкой Python, и может даже поддерживать python лучше, чем ваш текущий редактор. PyCrust - это еще одна опция для редактора python, реализованная в python и входящая в состав wxPython.

  3. у некоторых сред генерации кода или шаблонов, которые включают Python (например, генерирование HTML или приложения Python CGI / WSGI), могут быть причуды

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

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

2 голосов
/ 12 марта 2009

Когда я смотрю на C и Java-код, он всегда имеет хороший отступ.

Всегда. Мило. Отступ.

Очевидно, что пользователи C и Java тратят много времени на исправление своего пробела.

Как и программисты на Python.

2 голосов
/ 12 марта 2009

Это на самом деле держало меня подальше от Python. Исходя из сильного C-фона, я чувствовал себя так, будто ехал без ремня безопасности.

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

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

Это был довольно большой скачок для меня:)

1 голос
/ 12 марта 2009

Когда программисты на Python не следуют общему соглашению «Использовать 4 пробела на уровень отступа», определенному в PEP 8 . ( Если вы программист на Python и не читали его, сделайте это )

Затем вы столкнетесь с проблемами копирования и вставки.

1 голос
/ 12 марта 2009

Некоторые люди говорят, что им не нравится отступ в python, потому что он может вызвать ошибки, которые было бы очень трудно обнаружить в случае смешивания табуляции и пробелов. Например:

1 if needFrobnicating:
2    frobnicate()
3 update()

В зависимости от ширины вкладки строка 3 может отображаться в том же блоке, что и строка 2, или в окружающем блоке. Это не приведет к ошибке во время выполнения или к ошибке компиляции, но программа сделает неожиданную вещь.

Хотя я программирую на python в течение 10 лет и никогда не видел ошибки, вызванной смешиванием табуляции и пробелов

1 голос
/ 12 марта 2009

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

Поколение программистов проходило обучение на этих языках и неоднократно говорило, что свобода помещать что-либо куда угодно - замечательная особенность новых языков, и они должны быть благодарны. Свобода использовалась, злоупотреблялась и калибровалась (см. IOCC ) в течение многих лет.

Теперь маятник начал качаться назад, но многие все еще помнят, что принудительное расположение в некотором роде плохо, и сопротивляются этому.

ИМХО, что нужно сделать, это работать с языками на их собственных условиях, а не зацикливаться на битвах "вкус-лучше-меньше-заполнение".

1 голос
/ 12 марта 2009

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

Я считаю, что код Python из Интернета более "читабелен", поскольку это незначительное требование к форматированию выполнено. ИМО, это требование очень полезная функция.

IIRC, разве Haskell, OCaml (#light) и F # также не используют пробелы таким же образом? По какой-то причине я не видел жалоб на эти языки.

1 голос
/ 12 марта 2009

Раньше я думал, что проблемы с пустым пространством - это просто вопрос привыкания к нему.

Кто-то указал на некоторые серьезные недостатки с отступами Python, и я думаю, что они вполне допустимы, и некоторое подсознательное понимание этого заставляет опытные программы нервничать по поводу всего этого: -

  • Вырезать и вставлять просто больше не работает! Вы не можете вырезать код пластины котла из одного приложения и поместить его в другое приложение.
  • Ваш редактор становится бессильным помочь вам. С C / Jave и т. Д. Есть две вещи, происходящие с «официальными» отступами в фигурных скобках и «неофициальными» отступами в пустом пространстве. Большинство редакторов могут переформатировать отступы пустого пространства, чтобы соответствовать вложенности фигурных скобок, что дает вам визуальную подсказку о том, что что-то не так, если отступы не соответствуют вашим ожиданиям. С питонами парадигма «пространство - синтаксис» ваш редактор не может вам помочь.
  • Огромная боль от введения другого состояния в уже сложную логику. Добавление еще одного, если затем еще, в существующее условие влечет за собой множество глупых ошибок, допускающих вставку пробелов во многие строки вручную.
  • Рефакторинг - это кошмар. Перемещать блоки кода вокруг ваших классов так больно, что легче мириться с «неправильной» структурой класса, чем реорганизовать ее в лучшую.
1 голос
/ 12 марта 2009

Выберите хороший редактор. Вы хотели бы функции, такие как:

  1. Автоматический отступ, имитирующий последнюю строку с отступом
  2. Автоматический отступ, которым вы можете управлять (табуляции или пробелов)
  3. Показывать пробельные символы
  4. Обнаружение и имитация соглашения о пропусках при загрузке файла

Например, Vim позволяет мне выделять вкладки с этими настройками:

set list
set listchars=tab:\|_
highlight SpecialKey ctermbg=Red guibg=Red
highlight SpecialKey ctermfg=White guifg=White

Который можно отключить в любое время, используя:

set nolist

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

...