辅助功能 - 有没有办法将Python代码中的缩进转换为大括号?

我是一个完全盲目的程序员,想学习Python。 不幸的是,代码块用不同的缩进级别表示的事实是一个主要的障碍。 我想知道是否有任何可用的工具允许我使用大括号或其他代码块分隔符编写代码,然后将该格式转换为Python解释器可以使用的正确缩进表示形式?

Jared asked 2019-04-14T16:23:08Z
12个解决方案
55 votes

有一个解决你的问题,与python本身一起分发。 pindent.py,它位于Windows安装的Tools \ Scripts目录中(我的路径是C:\ Python25 \ Tools \ Scripts),如果你运行的话,看起来你已经从svn.python.org获取了它 Linux或OSX。

它在块关闭时添加注释,或者在放入注释时可以正确缩进代码。这是pindent通过命令输出的代码示例:

pindent.py -d

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

原来的pindent.py -d是:

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 -d根据注释插入正确的缩进(请阅读pindent.py的标题以获取详细信息),这应该允许您在python中进行编码而不必担心缩进。

我有兴趣了解您最终使用的解决方案,如果您需要任何进一步的帮助,请对此帖发表评论,我会尽力提供帮助。

Ryan answered 2019-04-14T16:23:59Z
24 votes

Python支持用于定义代码块的大括号,并且还支持使用“begin”和“end”标记。

请参阅以下代码示例:

class MyClass(object): #{
    def myfunction(self, arg1, arg2): #{
        for i in range(arg1): #{ 
            print i
        #}
    #}
#}

以bash风格为例:

fi = endclass = enddef = endclass = done = None
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1): #do
            if i > 5: #then
                print i
            fi
        done
    enddef
endclass

关于这个的最好的事情是你可以忘记放入一个紧密的括号,它仍然是有效的python!

class MyClass(object): #{
    def myfunction(self, arg1, arg2): #{
        for i in range(arg1): #{ 
            print i
        # whoops, forgot to close that bracket!
    #}
#}

原来的插科打..

我真正的建议是如果你能负担得起一个/一个盲人显示盲文显示器 - 熟人的盲人python程序员真的发现编写python程序必不可少的盲文显示器,它使缩进的事情变得更加痛苦。 一个40格的显示器非常值得。

Jerub answered 2019-04-14T16:25:04Z
10 votes

我个人怀疑目前是否存在,因为很多Python afficionados都喜欢这样的事实,即Python就是这样,空白分隔。

然而,我从未真正将其视为可访问性问题。 也许这是向Python提出错误报告的东西?

我假设您在这里使用屏幕阅读器输出? 这些标签看起来对你来说是“看不见的”吗? 使用盲文输出,它可能更容易阅读,但我可以理解这可能是多么令人困惑。

事实上,这对我来说非常有趣。 我希望我知道足够能够编写一个能够为你做这个的应用程序。

我认为这肯定是我将在bug报告中提出的,除非你自己已经或者想要这样做。

编辑:另外,正如John Millikin所指出的还有PyBraces这对你来说可能是一个可行的解决方案,并且可能会根据你的编码技巧被黑客攻击,这正是你所需要的(我希望如果是这样的话) ,你把它发布给像你这样的人使用)

编辑2:我刚刚向python bug跟踪器报告了这个问题

Mez answered 2019-04-14T16:26:13Z
9 votes

虽然我不是盲目的,但我听说过Emacspeak的好消息。 自从1998年发布8.0以来,他们就拥有了Python模式(他们似乎已经发布了28.0!)。 绝对值得一试。

technomalogical answered 2019-04-14T16:26:43Z
6 votes

你应该能够配置你的编辑器来说出标签和空格 - 我知道可以在大多数编辑器中显示空白,所以必须有一个可访问性选项来说出它们。

如果做不到这一点,那就是pybraces,它被写成一个恶作剧,但实际上可能对你有所帮助。

John Millikin answered 2019-04-14T16:27:18Z
6 votes

如果您使用的是Windows,我强烈建议您从以下位置查看EdSharp:[http://empowermentzone.com/EdSharp.htm]它支持所有领先的Windows屏幕阅读器,它可以配置为代表缩进级别的代码,或者它有一个内置的实用工具PyBrace,如果你想这样做,它可以转换为和/或从braces语法转换,它支持所有 程序员在我们的文本编辑器中期待的各种其他功能。 我已经使用它多年了,从PHP到JavaScript,从HTML到Python,我喜欢它。

fastfinge answered 2019-04-14T16:27:44Z
4 votes

我很感激你的问题,但是你认为你正在指定实现而不是你需要解决的问题。 如何使用屏幕阅读器告诉您缩进级别,而不是转换为大括号?

例如,有些人使用vim语法着色来表示python缩进级别。 也许修改后的语法着色可能会产生屏幕阅读器会读取的内容?

andy answered 2019-04-14T16:28:18Z
4 votes

所有这些“不,你不能”的答案都非常烦人。 当然可以。

这是一个黑客,但你可以做到。

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

在将大括号转换为解释器之前,使用自定义编码将大括号转换为缩进块。


顺便说一句,作为python的新手 - 我不接受甚至不允许使用大括号/泛型块分隔符的原因......除了那些是python开发者的偏好。 如果您正在对代码进行一些自动处理或在不了解空白区域的编辑器中工作,那么大括号至少不会被意外吃掉。 如果您自动生成代码,则无需跟踪缩进级别就很方便。 如果你想使用python做一个perl-esque单行,你就会自动瘫痪。 如果没有别的,只是作为一种保障。 如果您的1000行python程序获取所有选项卡怎么办? 你会逐行去找出缩进的位置吗?

询问它总是得到一个诙谐的回应,比如“只做”来自__ future __ import braces'“,”正确配置你的IDE“,”无论如何都要更好,所以要习惯它“......

我明白了他们的观点,但是嘿,如果我想,我可以在每一行之后加上一个分号。 所以我不明白为什么每个人都对括号的事情如此坚定。 如果你需要你的语言来迫使你正确地缩进,那么你首先就不会这样做。

只是我的2c - 无论如何我会使用大括号。

la11111 answered 2019-04-14T16:29:35Z
3 votes

我使用eclipse和pydev扩展,因为它是一个我有很多经验的IDE。 我也很欣赏它为语句,循环等编码提供的智能缩进。我已经将pindent.py脚本配置为外部工具,我可以在当前聚焦的python模块上运行,这使我的生活更轻松,所以我可以看到什么是 关闭,不必经常检查缩进。

Jared answered 2019-04-14T16:30:01Z
3 votes

搜索可访问的Python IDE,找到了这个并决定回答。在Windows下使用JAWS:

  1. 在您喜欢的文本编辑器中按JawsKey + 6(在字母上方的数字行上)转到设置中心。 如果JAWS提示创建新配置文件,请同意。
  2. 在搜索字段中,键入“缩进”
  3. 只有一个结果:“说缩进字符”。 打开它。
  4. 请享用!

对我们来说唯一令人沮丧的是我们无法在网站上享受代码示例(因为在浏览器中缩进说不太舒服 - 它会产生多余的语音)。

来自另一个Python初学者的快乐编码)。

Andre Polykanine answered 2019-04-14T16:31:07Z
1 votes

有各种答案解释如何做到这一点。 但我建议不要走这条路。 虽然您可以使用脚本进行转换,但这会使团队项目难以处理。

我的建议是配置屏幕阅读器以宣布标签。 这并不像听起来那么烦人,因为它只会说“缩进5”而不是“标签选项卡标签选项卡”。 此外,只有在更改时才会读取缩进,因此您可以在不听到缩进级别的情况下浏览整个代码块。 通过这种方式,听到压痕并不比听到牙箍更冗长。

由于我不知道您使用的操作系统或屏幕阅读器,遗憾的是我无法给出实现此目的的确切步骤。

Saqib answered 2019-04-14T16:31:47Z
0 votes

Edsger Dijkstra在他的“守卫指挥语言”中使用if~ff和od,这些似乎来自Algol68。 RosettaCode.org中还使用了一些示例python保护块。

fi = od = yrt = end = lambda object: None;
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1) :# do
            if i > 5 :# then
                print i
            fi
        od # or end(i) #
    end(myfunction)
end(MyClass)

如果使用空白错误的python代码可以明确地解除拼写并重新缩进保护块if / fi,do / od&amp; 尝试/ yrt和分号“;” 分开陈述。 非常适合明确的杂志列表或从网页剪切/粘贴。

编写一个简短的python程序来插入/删除保护块和分号应该很容易。

NevilleDNZ answered 2019-04-14T16:32:30Z
translate from https://stackoverflow.com:/questions/118643/is-there-a-way-to-convert-indentation-in-python-code-to-braces