提高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循环。 ;)


推荐阅读

    编程解析linux命令?

    编程解析linux命令?,系统,标准,基础,设备,发行,电脑,工具,密码,名字,适当,如

    linux目录结构树命令?

    linux目录结构树命令?,系统,工作,信息,数据,设备,管理,目录,发展,时间,结构,L

    linux命令看文件编码?

    linux命令看文件编码?,状态,系统,文件,工具,名称,数据,命令,格式,汉字,以下,L

    linux命令行图形编程?

    linux命令行图形编程?,系统,不了,情况,密码,工具,地方,百度,管理,图形界面,

    linux编程执行命令?

    linux编程执行命令?,电脑,系统,环境,命令,基础,发行,工具,代码,地址,名称,lin

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    复制项目的linux命令?

    复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功

    linux终端命令行编程?

    linux终端命令行编程?,系统,工作,命令,终端,概念,时间,第一,代码,发行,地方,L

    linux查询表结构命令?

    linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,l

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首

    linux命令项目部署?

    linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎

    linux编程所需的命令?

    linux编程所需的命令?,工作,地址,档案,系统,命令,管理,标准,信息,目录,文件,L

    linux命令行编程乱码?

    linux命令行编程乱码?,环境,统一,乱码,中文,状态,软件,数据,系统,字符集,文

    linux部署项目的命令?

    linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,L

    linux项目常用命令?

    linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,lin

    linux项目更新命令?

    linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,lin

    启动项目命令linux?

    启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎

    linux命令改变编码?

    linux命令改变编码?,系统,文件,工作,代码,工具,命令,字符集,格式,以下,方式,l

    linux编译项目的命令?

    linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,l

    修改linux编码命令?

    修改linux编码命令?,系统,文件,命令,情况,标准,工作,格式,字符集,以下,方式,l