Есть ли способ преобразовать отступ в коде Python в фигурные скобки? - PullRequest
78 голосов
/ 23 сентября 2008

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

Ответы [ 11 ]

55 голосов
/ 23 сентября 2008

Есть решение вашей проблемы, которое распространяется с самим питоном. pindent.py, он находится в каталоге Tools \ Scripts при установке Windows (мой путь к нему - C: \ Python25 \ Tools \ Scripts), похоже, вам нужно получить его из svn.python. org , если вы работаете в Linux или OSX.

Добавляет комментарии, когда блоки закрыты, или может правильно делать отступ для кода, если вводятся комментарии. Вот пример кода, выведенного командой pindent с командой:

pindent.py -c myfile.py

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

Где оригинал myfile.py был:

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

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

Например, запуск pindent.py -r myfile.py преобразует следующий код в myfile.py в тот же код с правильными отступами (и комментариями), который был получен в приведенном выше примере pindent.py -c:

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

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

11 голосов
/ 23 сентября 2008

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

Однако я никогда не думал об этом как о проблеме доступности. Может быть, это что-то выдвинуть как отчет об ошибке в Python?

Я бы предположил, что вы используете здесь программу чтения с экрана для вывода? Значит вкладки показались бы вам "невидимыми"? С выводом Брайля это может быть легче читать, но я могу точно понять, насколько это может сбить с толку.

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

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

Редактировать: Кроме того, как отметили от Джон Милликин Существует также PyBraces , которые могут быть для вас жизнеспособным решением и могут быть взломаны все вместе зависит от ваших навыков кодирования, чтобы быть именно тем, что вам нужно (и я надеюсь, что если это так, вы выпустите его для использования другими, такими как вы)

Редактировать 2: Я только что сообщил об этом в систему отслеживания ошибок Python

9 голосов
/ 23 сентября 2008

Хотя я не слепой, я слышал хорошие слова о Emacspeak . У них был режим Python с момента их выпуска 8.0 в 1998 году (похоже, что они до выпуска 28.0!). Определенно стоит проверить.

6 голосов
/ 08 ноября 2012

Если вы используете Windows, я настоятельно рекомендую вам взглянуть на EdSharp с: http://empowermentzone.com/EdSharp.htm Он поддерживает все ведущие программы чтения с экрана Windows, может быть настроен на использование уровней отступа кода или имеет встроенную утилиту PyBrace, которая может преобразовывать в синтаксис скобок и обратно, если вы хотите сделать это вместо этого, и поддерживает все В наших текстовых редакторах ожидаются и другие функции. Я использую его годами для всего: от PHP до JavaScript, от HTML до Python, и мне это нравится.

6 голосов
/ 23 сентября 2008

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

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

4 голосов
/ 17 августа 2012

Поиск доступной Python IDE, нашел это и решил ответить. Под Windows с JAWS:

  1. Перейдите в Центр настроек, нажав JawsKey + 6 (в строке чисел над буквами) в вашем любимом текстовом редакторе. Если JAWS предложит создать новый файл конфигурации, согласитесь.
  2. В поле поиска введите «отступ»
  3. Результат будет только один: "Скажи отступ символов". Включите это.
  4. Наслаждайтесь!

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

Удачного кодирования от другого новичка в Python).

4 голосов
/ 08 июля 2012

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

Это взлом, но вы можете сделать это.

http://timhatch.com/projects/pybraces/

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


Как в стороне, так и как кто-то новичок в Python - я не принимаю аргументацию даже за , не допускающего фигурных скобок / общих разделителей блоков ... кроме того, что это предпочтение разработчиков Python. Брекеты, по крайней мере, не будут съедены случайно, если вы выполняете некоторую автоматическую обработку своего кода или работаете в редакторе, который не понимает, что пробелы важны. Если вы генерируете код автоматически, удобно не отслеживать уровни отступа. Если вы хотите использовать python для создания однострочного perl-esque, вы автоматически хромаете. Если ничего другого, просто как гарантия. Что, если ваша программа на 1000 строк Python съедает все вкладки? Собираетесь идти построчно и выяснять, где должен быть отступ?

Когда вы спрашиваете об этом, вы всегда получите насмешливый ответ, такой как «просто сделайте» из __future__ импорт скобок »,« правильно сконфигурируйте вашу IDE »,« все равно лучше, так что привыкните »...

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

Просто мой 2с - я все равно собираюсь использовать фигурные скобки.

4 голосов
/ 23 сентября 2008

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

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

3 голосов
/ 26 октября 2008

Я использую eclipse с расширениями pydev, поскольку это IDE, с которой у меня большой опыт работы. Я также ценю умные отступы, которые он предлагает для кодирования операторов if, циклов и т. Д. Я настроил сценарий pindent.py как внешний инструмент, который я могу запускать в текущем модуле python, который облегчает мою жизнь, чтобы я мог видеть, что закрыто, где без необходимости постоянно проверять отступы.

1 голос
/ 17 января 2009

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

Я бы порекомендовал настроить программу чтения с экрана для объявления вкладок. Это не так раздражает, как кажется, так как в нем будет только «отступ 5», а не «вкладка вкладка вкладка вкладка вкладка». Кроме того, отступ будет считываться только тогда, когда он изменился, так что вы можете пройти весь блок кода, не слыша уровень отступа. Таким образом, слышать отступы не более многословно, чем слышать скобки.

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

...