【问题标题】:Improving Python readability?提高 Python 的可读性?
【发布时间】:2010-09-08 06:24:28
【问题描述】:

我最近非常喜欢 Python 编程。我来自一个对基于 C 的编码的强烈热爱的背景,在那里一切可能都比它应该的更复杂(但至少在你的胸前有头发)。因此,对于不需要大量速度的更复杂的事情,从 C 切换到 Python 对编写项目来说是利大于弊。

但是,从肉眼所见的方括号、圆括号和结构体中,我遇到了一个小问题:我发现 Python 难以阅读。

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

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 代码:

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 readability


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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()
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          与其专注于使现有结构更具可读性,不如专注于构建更具逻辑性的结构。制作更小的块,尽量不要过度嵌套块,制作更小的函数,并尝试更多地思考你的代码流。

          如果您无法快速确定代码的结构,您可能应该考虑重构并添加一些 cmets。代码流应该总是立即显现出来——你考虑得越多,你的代码就越难维护。

          【讨论】:

          • 我发现我的 Python 代码比我的 C++ 代码更扁平。不知道为什么。
          【解决方案5】:

          也许最好的办法是在您的编辑器中打开“显示空白”。然后,您可以直观地看到每行的标签距离(通常是一堆点),并且当它发生变化时会更加明显。

          【讨论】:

          • 如果缩进从空白本身来看并不明显,那么要么是不够的(根据 PEP 8,四列缩进仅使用空格),要么你没有以等宽字体阅读它。在决定让空白看起来像别的东西之前,其中任何一个都需要修复。
          【解决方案6】:
          from __future__ import braces
          

          需要我多说吗? :)

          说真的,PEP 8,“空白行”,§4 是官方的做法。

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-13
              • 2010-10-07
              • 2015-05-04
              • 2013-08-08
              相关资源
              最近更新 更多