Я хочу начать использовать Python для небольших проектов, но тот факт, что неуместная вкладка или отступ может вызвать ошибку компиляции, действительно действует мне на нервы. Есть ли какие-то настройки, чтобы выключить это?
Сейчас я использую NotePad ++. Может быть, есть IDE, которая позаботится о вкладках и отступах?
Используйте bython, это буквально питон без тупых пробелов.
если вы из C, то, может быть, вам больше подходит Cling.
Я думаю, что только в Notepad ++, сохранение файла или установка файла как .py сделает это за вас.






Нет. Как Python проанализирует ваш скрипт, если бы это можно было отключить?
Нет. Отступы как грамматика - неотъемлемая часть языка Python, к лучшему и к худшему.
Ага, к лучшему. Это затрудняет написание кода, который трудно читать.
Был задан вопрос о доступных IDE и т. д., И, безусловно, такие есть; таким образом, это плохой ответ.
Что ж, он отвечает на поставленный вопрос, а не на подразумеваемый (есть ли редактор, который действительно обрабатывает автоматические отступы, потому что мой явно отстой, и мне лень делать это самому?).
@Xiong Chiamiov Не обязательно, чтобы ОП плохо справлялся с отступом. Совершенно возможно, что люди работают с одним и тем же файлом python, и один использует этот отступ, а другой - другой. Большинство IDE не отображают пробелы по умолчанию, и буду сводит вас с ума, если вы получаете ошибку пробелов. Отсутствие токенов для обозначения области действия делает невозможным получение автоматического отступа, который бы, по крайней мере, Показать, в чем проблема.
Правила отступов Python предназначены для того, чтобы заставить всех следовать некоторым неуместным правилам. Правила отступов настолько популярны, что сделайте их необязательными.
к худшему. Становится невозможным скопировать и вставить некоторые фрагменты в интерактивную оболочку Python, чтобы быстро их протестировать. Кроме того, перемещение некоторых блоков кода в циклы или за их пределы вызывает боль.
Семантика отступов - это крушение поезда, как и динамическая типизация. Я могу нажать комбинацию клавиш в сотне различных инструментов и отформатировать чей-то тупой код. Я боролся с чьим-то кодом py, которому IDE (PyCharm) не помогает. Следующий шаг - отладка в шестнадцатеричном формате. Забавно, что отступы должны облегчить чтение кода, а динамический набор текста делает его невозможным. Может, я пользователь, что-то не так делаю?
Я так не считаю, поскольку Python - это язык с разделителями-пробелами. Возможно, вам помогут текстовый редактор или IDE с автоматическим отступом. Что вы сейчас используете?
Нет, нет. Отступы - это синтаксис Python. Вы можете:
Все проблемы с пробелами, которые у меня были, когда я запускал Python, были результатом смешивания табуляции и пробелов. Как только я настроил все, чтобы использовать только один или другой, у меня перестали быть проблемы.
В моем случае я настроил UltraEdit и vim на использование пробелов вместо вкладок.
Вам следует отключить символы табуляции в своем редакторе, когда вы работаете с Python (всегда, на самом деле, IMHO, но особенно когда вы работаете с Python). Ищите вариант типа «Использовать пробелы для вкладок»: в любом приличном редакторе он должен быть.
Да это правда. Но у Python есть одна интерпретация вкладок, а в вашем текстовом редакторе может быть другая. По этой причине руководство по языку Python рекомендует не смешивать символы табуляции и пробелы в отступах. ИМХО, самый простой способ гарантировать это - всегда использовать пробелы.
Не совсем. Есть несколько способов изменить правила использования пробелов для данной строки кода, но вам все равно понадобятся уровни отступа для определения области действия.
Вы можете завершить операторы с помощью ;, а затем начать новый оператор в той же строке. (Что люди часто делают, когда гольф.)
Если вы хотите разбить одну строку на несколько строк, вы можете закончить строку с помощью символа \, что означает, что текущая строка эффективно продолжается с первого непробельного символа следующей строки. Это визуально появляется нарушает обычные правила использования пробелов, но является допустимым.
Мой совет: не используйте табуляции, если у вас путаница между табуляциями и пробелами. Используйте пробелы и выберите 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 находится в блоге и на форуме, который беспорядок с пустым пространством, но это происходит все реже и реже по мере того, как приложения становятся умнее)
Вам трудно понять, что люди видят проблему в использовании отступов для разделения блоков? Действительно?
После исправления фигурных скобок можно использовать текстовый редактор для автоматического исправления отступов.
Если вы ищете рекомендации для Python IDE, после обширных исследований мне больше всего понравился WingIDE от Wing Software:
http://www.wingware.com/products
Есть бесплатная пробная версия, так что вам нечего терять. Он поддерживает все основные операционные системы, а полная версия стоит всего около 60 долларов.
Мне также очень нравится SciTE, которая абсолютно бесплатна, бесплатна, бесплатна!
http://scintilla.sourceforge.net/SciTEDownload.html
Я использую emacs для написания и WingIDE для отладки. Хорошая комбинация.
Многие IDE Python и универсальные текстовые / исходные редакторы могут обрабатывать пробелы за вас.
Однако лучше просто «отпустить» и насладиться правилами Python с пробелами. После некоторой практики они вообще не встанут у вас на пути, и вы обнаружите, что у них много достоинств, наиболее важными из которых являются:
Это не поддерживается.
В 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
Это действительный питон.
Но зачем писать код, как в первом примере? Читать сложнее.
Вы должны ввести его только первым способом. Возможно, у вас есть физические ограничения, такие как слабое зрение и использование программы чтения с экрана, или вы копируете / вставляете код из чего-то, что использует вкладки.
Как он узнает, что второе «if» входит в «elif», а последнее «else» - нет?
Точно так же, как другие компиляторы ставят скобки в соответствие. Он хранит его в стеке :)
Ах, строчки end if не заметил! Имеет смысл.
Emacs! Серьезно, его использование «tab is команда, а не персонаж» абсолютно идеально подходит для разработки на Python.
from __future__ import braces
Я не использую питон, но пришел сюда из любопытства. Что бы это сделало?
@ Майкл Это шутка.
Жестокая, жестокая шутка. Я видел это и почти попробовал. Отступы и динамическая типизация убьют этот язык. Я загружаю чей-то код в среду IDE (которую, по словам всех апологетов, я должен использовать, поскольку она решает все проблемы Python), все подчеркнуто волнистыми линиями, потому что автор не следовал никаким соглашениям. Это похоже на то, как Word подчеркивает весь документ для проверки орфографии и грамматики. Через десять лет в Python 4 появятся фигурные скобки. Прямо сейчас мы вынуждены использовать формат домашнего кода Гвидо. Я чувствую, что пишу на VBA.
Проверьте параметры своего редактора или найдите редактор / 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, который действителен в обоих контекстах.
Я удивлен, что никто не упомянул IDLE как хороший редактор Python по умолчанию. Хорошие цвета синтаксиса, обрабатывает отступы, имеет intellisense, легко настраиваемые шрифты и поставляется с загрузкой Python по умолчанию. Черт возьми, я пишу в основном IronPython, но его так приятно и легко редактировать в IDLE и запускать ipy из командной строки.
О, и что такого особенного в пробелах? Самый простой для чтения C или C# также имеет хороший отступ, python просто применяет действительно простое правило форматирования.
Просто используйте Ruby, он намного лучше Python.
Это не ответ на вопрос. провалился народ.
Как бы то ни было, я LOOOOOOOOOOOOOOOVE Ruby, это ужасный ответ.
Любой приличный редактор программирования сведет это раздражение к нулю. Я вижу, что в Notepad ++ есть подсветка синтаксиса, вероятно, вам просто нужно правильно настроить свои предпочтения для автоматического отступа и т. д.
Я тоже использую Notepad ++ (2013). Добавлен ярлык для меню /
View/Show Symbol/Show whitespace and tab. В меню /Settings/Preferences/Tab Settingsвы можете указать, использовать ли табуляции или (настраиваемое количество, по умолчанию 4) пробелы. (Я тоже назначил ярлык за изменение этого параметра, но он довольно хакерский и содержит ошибки.) Если я получаю файл со случайным отступом, он может унифицировать их, нажав Ctrl + A Tab * Shift + Tab. У меня он работает более стабильно, чем Eclipse.