提高Python的可读性?

提高Python的可读性?

Improving Python readability?

最近我真的很喜欢Python编程。我来自对基于C的编码的强烈热爱的背景,那里的一切可能都比它本应的要复杂(但至少要把头发放在胸前)。因此,在不需要大量速度的情况下,从C切换到Python,这在编写项目时更多的是受益,而不是失败。

但是,从肉眼可以看到的方括号,括号和结构的领域来看,我遇到了一个小问题:我发现Python难以阅读。

例如,以下文本块很难理解,除非我盯着它看(我不喜欢这样做):

1
2
3
4
5
6
7
if foo:
   bar = baz
   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()

问题发生在if块的末尾:所有的制表符,然后突然返回到震撼的块,几乎感到不安。作为解决方案,我开始像这样对Python进行编码:

1
2
3
4
5
6
7
8
9
if foo:
   bar = baz
   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()
   #-- while --
#-- if --

did_i_not_warn_you_biz()
my_father_is_avenged()

出于某种奇怪的原因,这使我更有能力阅读自己的代码。但是我很好奇:是否有其他人遇到我的奇怪问题,找到了更轻松的方法来使他们的分页式代码更具可读性?我很想在这成为我的习惯之前,找出是否有更好的方法可以做到这一点。


学习一种新的编程语言的一部分是学习阅读该语言的代码。这样的拐杖可能会使阅读您自己的代码更容易,但是它将阻碍学习如何阅读其他人的Python代码的过程。我真的认为您最好摆脱块注释的结尾并习惯于普通的Python。


我喜欢在块周围放置空白行,以使控制流更加明显。例如:

1
2
3
4
5
6
7
8
if foo:
   bar = baz

   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()


您可以尝试增加缩进大小,但总的来说,我只是说,放松一下,随着时间的推移。我认为尝试使Python看起来像C并不是一个好主意。


与其着重于使现有结构更具可读性,不如着重于使逻辑结构更合理。创建较小的块,尝试不要过多地嵌套块,创建较小的函数,并尝试更多地考虑代码流。

如果到了无法快速确定代码结构的地步,则可能应该考虑重构并添加一些注释。代码流应该总是立即显而易见的-您需要考虑的越多,代码的可维护性就越差。


也许最好的办法是在编辑器中打开"显示空白"。然后,您将直观地看到每行中的选项卡制表符的距离(通常是一堆点),并且当更改时会更加明显。


1
from __future__ import braces

需要我说更多吗? :)

严重的是,PEP 8 \\'空白行\\',第4节是这样做的官方方法。


我希望了解有关Python语法的更多详细信息。通常,如果一段代码看起来很奇怪,通常有一种更好的编写方式。例如,在上面的示例中:

1
2
3
4
5
6
bar = foo if baz else None
while bar not biz:
    bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()

虽然这是一个很小的更改,但可能有助于提高可读性。而且,老实说,我从未使用过while循环,所以有了一个不错的改变,您将获得一个简洁的列表理解或for循环。 ;)


推荐阅读