我是一个完全盲目的程序员,想学习Python。不幸的是,代码块用不同的缩进级别表示的事实是一个主要的障碍。我想知道是否有任何工具可以让我使用大括号或其他代码块分隔符编写代码,然后将该格式转换为Python解释器可以使用的正确缩进表示形式?
答案 0 :(得分:55)
您的问题有一个解决方案,它与python本身一起分发。 pindent.py
,它位于Windows安装的Tools \ Scripts目录中(我的路径是C:\ Python25 \ Tools \ Scripts),看起来如果你是grab it from 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
我有兴趣了解您最终使用的解决方案,如果您需要任何进一步的帮助,请对此帖发表评论,我会尽力提供帮助。
答案 1 :(得分:11)
我个人怀疑目前是否存在,因为许多Python afficionados都喜欢这样的事实,即Python是这样的,空格分隔。
然而,我从未真正将其视为可访问性问题。也许这是向Python提出的错误报告?
我假设您在这里使用屏幕阅读器输出?这些标签看起来对你来说是“看不见的”吗?使用盲文输出,它可能更容易阅读,但我可以理解这可能是多么令人困惑。
事实上,这对我来说非常有趣。我希望我知道足够能够编写一个能够为你做这个的应用程序。
我认为这肯定是我将在错误报告中提供的内容,除非您已经自己或想要这样做。
修改:另外,noted为John Millikin还有PyBraces这对您来说可能是一个可行的解决方案,并且可能会根据您的编码技能被黑客攻击正是你所需要的(我希望如果是这样的话,你会把它发布给像你这样的人使用)
编辑2:我只是reported this到python bug跟踪器
答案 2 :(得分:9)
虽然我不是盲目的,但我听到了关于Emacspeak的好消息。自1998年他们8.0 release以来,他们已经拥有了Python模式(他们似乎要发布28.0!)。绝对值得一试。
答案 3 :(得分:6)
您应该能够配置编辑器以说出标签和空格 - 我知道在大多数编辑器中显示空白是可能的,因此必须有一个可访问性选项来说出它们。< / p>
如果失败了,那就是pybraces,这是一个恶作剧,但实际上可能对你有所帮助。
答案 4 :(得分:6)
如果您使用的是Windows,我强烈建议您从以下位置查看EdSharp: http://empowermentzone.com/EdSharp.htm 它支持所有领先的Windows屏幕阅读器,它可以配置为代码缩进级别,或者它有一个内置的实用工具PyBrace,如果你想这样做,它可以转换为和/或从braces语法转换,它支持所有程序员在我们的文本编辑器中期待的各种其他功能。我已经使用它多年了,从PHP到JavaScript,从HTML到Python,我喜欢它。
答案 5 :(得分:4)
我很感激您的问题,但是您认为您正在指定实施而不是您需要解决的问题。如何使用屏幕阅读器告诉您缩进级别,而不是转换为大括号?
例如,some people已经使用vim语法着色来表示python缩进级别。也许修改后的语法着色会产生屏幕阅读器会读取的内容?
答案 6 :(得分:4)
所有这些“你不能”的答案都非常烦人。当然可以。
这是一个黑客,但你可以做到。
http://timhatch.com/projects/pybraces/
使用自定义编码将大括号转换为缩进块,然后再将其移交给解释器。
顺便说一下,作为python的新手 - 我不接受甚至允许大括号/泛型块分隔符背后的推理......除了那些是python开发者的偏好。如果您正在对代码进行一些自动处理或在不了解空白区域的编辑器中工作,那么大括号至少不会被意外吃掉。如果您自动生成代码,则无需跟踪缩进级别就很方便。如果你想使用python做一个perl-esque单行,你就会自动瘫痪。如果没有别的,只是作为一种保障。如果您的1000行python程序获取所有选项卡怎么办?你会逐行去找出缩进的位置吗?
询问它总是会得到像“__ future __ import braces”中的“just do”,“正确配置你的IDE”,“无论如何都要更好地适应它”......
我看到了他们的观点,但是嘿,如果我想,我可以在每一行之后加上一个分号。所以我不明白为什么每个人都对括号的事情如此坚定。如果您需要使用您的语言来强制缩进,那么您首先就不会这样做。
只是我的2c - 无论如何我都会使用牙套。
答案 7 :(得分:4)
搜索可访问的Python IDE,找到并决定回答。 在Windows下使用JAWS:
唯一让我们感到沮丧的是我们无法在网站上享受代码示例(因为在浏览器中缩进说不太舒服 - 它会产生多余的语音)。
来自另一位Python初学者的快乐编码。)
答案 8 :(得分:3)
我使用eclipse和pydev扩展,因为它是一个我有很多经验的IDE。我也很欣赏它为语句,循环等编码提供的智能缩进。我已将pindent.py脚本配置为外部工具,我可以在当前聚焦的python模块上运行,这使我的生活更轻松,所以我可以看到什么是关闭,不得不经常检查缩进。
答案 9 :(得分:1)
有各种答案解释如何做到这一点。但我建议不要走这条路。虽然您可以使用脚本进行转换,但这会使团队项目难以工作。
我的建议是配置屏幕阅读器以宣布标签。这并不像听起来那么烦人,因为它只会说“缩进5”而不是“标签选项卡标签选项卡”。此外,只有在更改时才会读取缩进,因此您可以在不听到缩进级别的情况下浏览整个代码块。通过这种方式,听到压痕并不比听到牙箍更冗长。
由于我不知道您使用的是哪种操作系统或屏幕阅读器,我很遗憾无法给出实现此目的的确切步骤。
答案 10 :(得分:0)
Edsger Dijkstra在他的“守卫命令语言”中使用if ~ fi和do ~ 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程序来插入/删除保护块和分号应该很容易。