83

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

4

11 回答 11

57

您的问题有一个解决方案,它与 python 本身一起分发。pindent.py,它位于 Windows 安装中的 Tools\Scripts 目录中(我的路径是 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

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

于 2008-09-23T02:04:01.760 回答
11

我个人怀疑目前是否存在,因为许多 Python 爱好者喜欢 Python 的这种方式,空格分隔。

但是,我从未真正将其视为可访问性问题。也许它是作为 Python 的错误报告提出的?

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

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

我认为这肯定是我会在错误报告中放入的东西,除非你自己已经这样做了,或者想要这样做。

编辑:另外,正如John Millikin所指出的,还有PyBraces这对您来说可能是一个可行的解决方案,并且可能会根据您的编码技能被一起破解以成为您所需要的(我希望如果是这样的话,您将其发布给像您自己一样的其他人使用)

编辑 2:我刚刚将此报告给 python 错误跟踪器

于 2008-09-23T01:35:23.517 回答
9

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

于 2008-09-23T01:51:53.303 回答
6

您应该能够配置您的编辑器来朗读制表符和空格——我知道在大多数编辑器中都可以显示空格,因此必须有一个可访问性选项来朗读它们。

如果做不到这一点,还有pybraces,它是作为一个恶作剧而写的,但实际上可能对你有一些帮助。

于 2008-09-23T01:38:10.683 回答
6

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

于 2012-11-08T15:40:12.840 回答
5

所有这些“不,你不能”类型的答案真的很烦人。当然可以。

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

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

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


顺便说一句,作为python的新手——我不接受甚至不允许大括号/通用块分隔符背后的原因......除了这是python开发人员的偏好。如果您正在对代码进行一些自动处理或在不了解空格很重要的编辑器中工作,那么大括号至少不会被意外吃掉。如果您要自动生成代码,则不必跟踪缩进级别很方便。如果你想使用 python 来做一个 perl 式的单线,你会自动瘫痪。如果没有别的,只是作为一种保障。如果你的 1000 行 Python 程序的所有标签都被吃掉了怎么办?你要逐行找出缩进应该在哪里?

询问它总是会得到一个诙谐的回答,比如“只做'从__未来__导入大括号'”,“正确配置你的IDE”,“反正它更好,所以习惯它”......

我明白他们的意思,但是,嘿,如果我愿意,我可以在每一行后加一个分号。所以我不明白为什么每个人都对牙套如此执着。如果您需要您的语言来强制您正确缩进,那么您一开始就没有做对。

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

于 2012-07-08T09:42:09.123 回答
4

我很欣赏你的问题,但认为你是在指定实现而不是你需要解决的问题。与其转换成大括号,不如想办法让屏幕阅读器告诉你缩进级别?

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

于 2008-09-23T01:43:21.843 回答
4

搜索一个可访问的 Python IDE,发现这个并决定回答。在带有 JAWS 的 Windows 下:

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

唯一让我们感到沮丧的是,我们无法在网站上享受代码示例(因为在浏览器中使用缩进说话不太舒服——它会产生多余的语音)。

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

于 2012-08-16T23:34:46.350 回答
3

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

于 2008-10-25T20:06:08.097 回答
1

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

我的建议是配置您的屏幕阅读器以宣布选项卡。这并不像听起来那么烦人,因为它只会说“缩进 5”而不是“tab tab tab tab tab”。此外,缩进只有在更改时才会被读取,因此您可以通过整个代码块而不会听到缩进级别。这样,听到缩进并不比听到大括号更冗长。

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

于 2009-01-17T18:49:29.283 回答
1

Edsger Dijkstra在他的“受保护的命令语言”中使用了if ~ fido ~ od,这些似乎起源于Algol68RosettaCode.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)

如果使用保护块 if/fi、do/od 和 try/yrt 以及分号 ";" 分开陈述。非常适合明确的杂志列表或从网页剪切/粘贴。

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

于 2009-09-25T22:36:33.670 回答