有没有一种方法可以将 Python 代码中的缩进转换为大括号?

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

11631 次浏览

我个人怀疑目前是否存在这样的情况,因为很多 Python 爱好者都喜欢 Python 是这样的,空格被限定了。

然而,我从来没有真正考虑过这个可访问性问题。也许可以把它作为 bug 报告提交给 Python?

我假设您在这里使用屏幕阅读器,但是输出?所以标签对你来说是“隐形的”?有了盲文输出,它可能更容易阅读,但我完全可以理解这可能是多么令人困惑。

事实上,这对我来说很有趣。我希望我知道的足够多,能够写一个应用程序,将这样做你。

我觉得这绝对是我要写错误报告的原因,除非你自己已经这么做了,或者你想这么做。

编辑: 还有,作为 知道了 by John Millikin还有 皮布拉斯这可能是一个可行的解决方案,并可能被砍在一起,根据您的编码技能,以正是您所需要的(我希望,如果是这种情况下,您释放出来,像您一样的其他人使用)

编辑2: 我刚刚 报告了这个到巨蟒 bug 追踪器

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

如果做不到这一点,就会出现 花边,它是作为一个恶作剧而编写的,但通过一些工作可能对您实际上是有用的。

我理解您的问题,但是认为您指定的是实现,而不是您需要解决的问题。与其转换为大括号,不如设法让屏幕阅读器告诉您缩进级别?

例如,一些人使用 vim 语法着色来表示 Python 缩进级别。也许一个修改过的语法着色可以产生一些你的屏幕阅读器可以阅读的东西?

Although I am not blind, I have heard good things about 埃马克斯语. They've had a Python mode since their 8.0版本 in 1998 (they seem to be up to release 28.0!). Definitely worth checking out.

有一个解决方案可以通过 python 本身发布。它位于 Windows 安装的 Tools Scripts 目录中(我的路径是 C: Python 25 Tools Scripts) ,如果你在 Linux 或 OSX 上运行,看起来你必须使用 从 svn.python.org 获取

它在块关闭时添加注释,或者在输入注释时正确缩进代码。下面是 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

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

我在 pydev 扩展中使用 eclipse,因为它是一个我有很多经验的 IDE。我还欣赏它为 if 语句、循环等编码提供的智能缩进。我已经将 pindent.py 脚本配置为一个外部工具,可以在当前关注的 python 模块上运行,这使我的生活更加轻松,因此我可以看到哪里关闭了,而不必不断检查缩进。

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

我的建议是将屏幕阅读器配置为公布选项卡。这并不像听起来那么烦人,因为它只会说“缩进5”而不是“标签标签标签”。此外,缩进只有在它发生变化时才会被读取,因此您可以遍历整个代码块而无需听到缩进级别。这样,听到缩进就不会比听到大括号更冗长了。

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

Edsger Dijkstra 在他的“守卫命令语言”中使用了 如果 ~ Fi做什么,这些似乎起源于 Algol68。在 RosettaCode.org中也有一些使用蟒蛇保护的块的例子。

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 程序来插入/删除保护块和分号应该很容易。

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

这是黑客技术,但你能做到。

Http://timhatch.com/projects/pybraces/

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


顺便说一句,作为 Python 的新手,我不接受甚至 允许大括号/通用块分隔符背后的理由... 除了 Python 开发人员的偏好。如果您正在对代码进行某种自动处理,或者正在编辑器中工作,而编辑器不知道留白很重要,那么大括号至少不会意外地被吃掉。如果是自动生成代码,那么不必跟踪缩进级别就很方便。如果您希望使用 python 来执行 perl 式的一行程序,那么您将自动陷入瘫痪。别的不说,就当是个保护措施。如果您的1000行 python 程序的所有标签页都被吃掉了怎么办?你要一行一行地去找出缩进的位置吗?

询问它总是会得到一个半开玩笑的回答,比如“只要做‘ from _ _ future _ _ import braces’”,“正确地配置您的 IDE”,“无论如何都会更好,所以要习惯它”..。

我明白他们的意思,但是,如果我想的话,我可以在每一行后面加个分号。我不明白为什么每个人都坚持要戴牙套。如果您需要使用自己的语言来强制正确缩进,那么从一开始就没有做对。

只有我的2C 反正我也要用牙套。

在搜索一个可访问的 Python IDE 时,发现了这个问题并决定回答。 在 Windows 下使用 JAWS:

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

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

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

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