Есть ли способ кодирования на Python без критериев табуляции, отступа и пробелов?

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

Сейчас я использую NotePad ++. Может быть, есть IDE, которая позаботится о вкладках и отступах?

Я тоже использую Notepad ++ (2013). Добавлен ярлык для меню / View / Show Symbol / Show whitespace and tab. В меню / Settings / Preferences / Tab Settings вы можете указать, использовать ли табуляции или (настраиваемое количество, по умолчанию 4) пробелы. (Я тоже назначил ярлык за изменение этого параметра, но он довольно хакерский и содержит ошибки.) Если я получаю файл со случайным отступом, он может унифицировать их, нажав Ctrl + A Tab * Shift + Tab. У меня он работает более стабильно, чем Eclipse.

n611x007 28.11.2013 21:24

Используйте bython, это буквально питон без тупых пробелов.

Vladimir_314159 19.06.2018 19:14

если вы из C, то, может быть, вам больше подходит Cling.

Foad 05.10.2018 01:59

Я думаю, что только в Notepad ++, сохранение файла или установка файла как .py сделает это за вас.

Amit Amola 06.01.2019 20:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
4
12 841
29
Перейти к ответу Данный вопрос помечен как решенный

Ответы 29

Нет. Как Python проанализирует ваш скрипт, если бы это можно было отключить?

Нет. Отступы как грамматика - неотъемлемая часть языка Python, к лучшему и к худшему.

Ага, к лучшему. Это затрудняет написание кода, который трудно читать.

Echo says Reinstate Monica 19.09.2008 18:58

Был задан вопрос о доступных IDE и т. д., И, безусловно, такие есть; таким образом, это плохой ответ.

Charles Duffy 23.09.2008 03:30

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

Xiong Chiamiov 02.09.2009 00:36

@Xiong Chiamiov Не обязательно, чтобы ОП плохо справлялся с отступом. Совершенно возможно, что люди работают с одним и тем же файлом python, и один использует этот отступ, а другой - другой. Большинство IDE не отображают пробелы по умолчанию, и буду сводит вас с ума, если вы получаете ошибку пробелов. Отсутствие токенов для обозначения области действия делает невозможным получение автоматического отступа, который бы, по крайней мере, Показать, в чем проблема.

Calyth 08.10.2009 20:44

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

You Know Nothing Jon Snow 23.07.2013 11:05

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

Alex F 18.12.2017 16:06

Семантика отступов - это крушение поезда, как и динамическая типизация. Я могу нажать комбинацию клавиш в сотне различных инструментов и отформатировать чей-то тупой код. Я боролся с чьим-то кодом py, которому IDE (PyCharm) не помогает. Следующий шаг - отладка в шестнадцатеричном формате. Забавно, что отступы должны облегчить чтение кода, а динамический набор текста делает его невозможным. Может, я пользователь, что-то не так делаю?

Sean Anderson 21.09.2018 01:28

Я так не считаю, поскольку Python - это язык с разделителями-пробелами. Возможно, вам помогут текстовый редактор или IDE с автоматическим отступом. Что вы сейчас используете?

Нет, нет. Отступы - это синтаксис Python. Вы можете:

  1. Используйте tabnanny.py, чтобы проверить свой код
  2. Используйте редактор с поддержкой синтаксиса, который выделяет такие ошибки (vi делает это, я уверен, что это делает emacs, а затем и большинство IDE).
  3. (надумано) напишите собственный препроцессор для преобразования фигурных скобок (или любых других разделителей блоков, которые вам нравятся) в отступы

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

В моем случае я настроил UltraEdit и vim на использование пробелов вместо вкладок.

Вам следует отключить символы табуляции в своем редакторе, когда вы работаете с Python (всегда, на самом деле, IMHO, но особенно когда вы работаете с Python). Ищите вариант типа «Использовать пробелы для вкладок»: в любом приличном редакторе он должен быть.

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

Chris Conway 02.09.2009 01:10

Не совсем. Есть несколько способов изменить правила использования пробелов для данной строки кода, но вам все равно понадобятся уровни отступа для определения области действия.

Вы можете завершить операторы с помощью ;, а затем начать новый оператор в той же строке. (Что люди часто делают, когда гольф.)

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

Мой совет: не используйте табуляции, если у вас путаница между табуляциями и пробелами. Используйте пробелы и выберите 2 или 3 пробела в качестве уровня отступа.

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

Можно написать препроцессор, который берет код со случайным отступом с ключевыми словами псевдо-питона, такими как «endif» и «end while», и правильно делает отступы. Мне пришлось сделать это при использовании python в качестве «ASP-подобного» языка, потому что само понятие «отступы» в такой среде становится немного нечетким.

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

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

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

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

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

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

Ответ принят как подходящий

I'm currently using NotePad++. Is there maybe an IDE that would take care of the tabs and indenting?

За это мне понравились расширения Eclipse pydev.

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

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

Список редакторов можно найти в вики-сайте Python, хотя он слишком утомителен: - http://wiki.python.org/moin/PythonEditors

Здесь уже есть вопрос, который пытается немного уменьшить его:

Может быть, вам стоит добавить более конкретный вопрос по этому поводу: «Какой редактор Python или IDE вы предпочитаете для Windows и почему?»

Я немного неохотно изучал Python из-за табуляции. Однако я почти не заметил этого, когда использовал Vim.

Мне трудно понять, когда люди отмечают это как проблему с Python. Я сразу же к нему обратился и на самом деле считаю, что это одна из моих любимых «особенностей» языка :)

На других языках у меня две работы: 1. Установите фигурные скобки, чтобы компьютер мог проанализировать мой код. 2. Исправьте отступ, чтобы я мог разобрать свой код.

Так что в Python у меня вдвое меньше поводов для беспокойства ;-)

(nb единственный раз, когда у меня когда-либо возникала проблема с отступом, это когда код Python находится в блоге и на форуме, который беспорядок с пустым пространством, но это происходит все реже и реже по мере того, как приложения становятся умнее)

Вам трудно понять, что люди видят проблему в использовании отступов для разделения блоков? Действительно?

Ben 27.07.2011 13:34

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

ThePiercingPrince 15.07.2013 08:58

Если вы ищете рекомендации для Python IDE, после обширных исследований мне больше всего понравился WingIDE от Wing Software:

http://www.wingware.com/products

Есть бесплатная пробная версия, так что вам нечего терять. Он поддерживает все основные операционные системы, а полная версия стоит всего около 60 долларов.

Мне также очень нравится SciTE, которая абсолютно бесплатна, бесплатна, бесплатна!

http://scintilla.sourceforge.net/SciTEDownload.html

Я использую emacs для написания и WingIDE для отладки. Хорошая комбинация.

Michael Warner 05.03.2009 02:43

Многие IDE Python и универсальные текстовые / исходные редакторы могут обрабатывать пробелы за вас.

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

  1. Из-за принудительного использования пробелов код Python легче понять. Вы обнаружите, что, читая код, написанный другими, легче разбираться, чем код, скажем, на Perl или PHP.
  2. Пробелы избавляют вас от нескольких нажатий клавиш управляющих символов, таких как {и}, которые засоряют код, написанный на языках типа Си. Меньше {s и} означает, среди прочего, меньше RSI и боли в запястье. К этому нельзя относиться легкомысленно.

пирамиды

Это не поддерживается.

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

И пробел, и табуляция могут указывать на отступ. Это прискорбно, потому что:

  • Толкование вкладки различается среди редакторов и IDE и часто настраиваемый (и часто настраиваемый).

  • OTOH, некоторые редакторы не настраиваемый, но применяющий свои собственные правила отступов.

  • Различные последовательности пробелы и табуляции могут быть визуально неотличимы.

  • Вырезание и вставка могут изменять пробелы.

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

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

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

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

If(first condition)
   if (second condition)
      do something interesting;
else
  do something different;

Приведет к неприятным сюрпризам.

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

Если вы не хотите использовать IDE / текстовый редактор с автоматическим отступом, вы можете использовать скрипт pindent.py, который находится в каталоге Tools \ Scripts. Это препроцессор, который может преобразовывать такой код, как:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
end if
else:
print 'oops!'
end if
end def foobar

в:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

Это действительный питон.

Но зачем писать код, как в первом примере? Читать сложнее.

Echo says Reinstate Monica 19.09.2008 19:00

Вы должны ввести его только первым способом. Возможно, у вас есть физические ограничения, такие как слабое зрение и использование программы чтения с экрана, или вы копируете / вставляете код из чего-то, что использует вкладки.

Ryan 22.09.2008 07:32

Как он узнает, что второе «if» входит в «elif», а последнее «else» - нет?

detly 23.04.2010 03:32

Точно так же, как другие компиляторы ставят скобки в соответствие. Он хранит его в стеке :)

Ryan 23.04.2010 06:44

Ах, строчки end if не заметил! Имеет смысл.

detly 23.04.2010 15:39

Emacs! Серьезно, его использование «tab is команда, а не персонаж» абсолютно идеально подходит для разработки на Python.

from __future__ import braces

Я не использую питон, но пришел сюда из любопытства. Что бы это сделало?

Michael 29.07.2017 06:34

@ Майкл Это шутка.

VELFR 10.08.2018 10:07

Жестокая, жестокая шутка. Я видел это и почти попробовал. Отступы и динамическая типизация убьют этот язык. Я загружаю чей-то код в среду IDE (которую, по словам всех апологетов, я должен использовать, поскольку она решает все проблемы Python), все подчеркнуто волнистыми линиями, потому что автор не следовал никаким соглашениям. Это похоже на то, как Word подчеркивает весь документ для проверки орфографии и грамматики. Через десять лет в Python 4 появятся фигурные скобки. Прямо сейчас мы вынуждены использовать формат домашнего кода Гвидо. Я чувствую, что пишу на VBA.

Sean Anderson 21.09.2018 01:39

Проверьте параметры своего редактора или найдите редактор / IDE, который позволяет конвертировать табуляции в пробелы. Я обычно устанавливаю параметры своего редактора, чтобы заменить символ TAB на 4 пробела, и я никогда не сталкивался с какими-либо проблемами.

Странно - никто не упомянул GEdit (Gnome) или OpenKomodo (Windows, Mac, GNU / Linux ...). Оба они великолепны!

OpenKomodo особенно хорошо работает с табуляциями и пробелами. И - это бесплатно. Ой! Когда мне нужна более легкая штука, я просто использую GEdit.

Загрузите OpenKomodo здесь - http://www.openkomodo.com/

Нет, выхода нет, и это по замыслу:

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance

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

Да, способ есть. Я ненавижу эти ответы «ни в коем случае», нет возможности, пока вы не откроете один.

И в таком случае, чего бы он ни стоил, он есть.

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

Основные приемы заключаются в том, чтобы всегда использовал return в конце функции, всегда использовал pass в конце if или в конце определения класса и всегда использовал continue в конце while. Конечно, для этой цели подойдет любая другая инструкция нет эффекта.

Затем простой сценарий awk может взять ваш код и определить конец блока, прочитав инструкции pass / continue / return, и начало кода с инструкциями if / def / while / ....

Конечно, поскольку вы разработаете свой сценарий отступа, вы увидите, что вам не нужно использовать continue после возврата внутри if, потому что возврат вызовет механизм отступа назад. То же самое и в других ситуациях. Просто привыкните к этому.

Если вы прилежны, вы сможете вырезать / вставлять и добавлять / удалять if и автоматически исправлять отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

«Пробел» в Python существует специально для избегать, требующего какой-либо конкретной закрывающей метки или слова в конце блоков if / while / def. Как бы вы отличили конец блока if внутри блока class от конца самого блока class? Существует только один стандартный оператор запрета операций, pass, который действителен в обоих контекстах.

Dan Lenski 19.06.2014 21:26

Я удивлен, что никто не упомянул IDLE как хороший редактор Python по умолчанию. Хорошие цвета синтаксиса, обрабатывает отступы, имеет intellisense, легко настраиваемые шрифты и поставляется с загрузкой Python по умолчанию. Черт возьми, я пишу в основном IronPython, но его так приятно и легко редактировать в IDLE и запускать ipy из командной строки.

О, и что такого особенного в пробелах? Самый простой для чтения C или C# также имеет хороший отступ, python просто применяет действительно простое правило форматирования.

Просто используйте Ruby, он намного лучше Python.

http://www.ruby-lang.org

Это не ответ на вопрос. провалился народ.

totten 20.08.2013 21:24

Как бы то ни было, я LOOOOOOOOOOOOOOOVE Ruby, это ужасный ответ.

Michal Štein 17.02.2019 22:15

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

Другие вопросы по теме