我是否应该使我的python代码不那么简单,以提高可读性?

use*_*424 6 python coding-style readability

我试着让我的代码变得傻瓜,但我注意到输入内容需要花费大量时间,而且需要更多时间来阅读代码.

代替:

class TextServer(object):
    def __init__(self, text_values):
        self.text_values = text_values
        # <more code>
    # <more methods>
Run Code Online (Sandbox Code Playgroud)

我倾向于写这个:

class TextServer(object):
    def __init__(self, text_values):
        for text_value in text_values:
            assert isinstance(text_value, basestring), u'All text_values should be str or unicode.'
            assert 2 <= len(text_value), u'All text_values should be at least two characters long.'
        self.__text_values = frozenset(text_values) # <They shouldn't change.>
        # <more code>
    @property
    def text_values(self):
        # <'text_values' shouldn't be replaced.>
        return self.__text_values
    # <more methods>
Run Code Online (Sandbox Code Playgroud)

我的python编码风格是否太偏执了?或者有没有办法提高可读性,同时保持万无一失?

  • 注1:我在两者之间添加了注释<,>只是为了澄清.
  • 注2:我试图阻止滥用我的代码的主要傻瓜是我未来的自我.

Eli*_*sky 12

以下是本页面对Python习语的一些好建议:


捕获错误而不是避免它们以避免在特殊情况下使代码混乱.这个成语被称为EAFP("更容易请求宽恕而不是许可"),而不是LBYL("在你跳跃之前看").这通常使代码更具可读性.例如:

更差:

#check whether int conversion will raise an error
if not isinstance(s, str) or not s.isdigit:
    return None
elif len(s) > 10:    #too many digits for int conversion
    return None
else:
    return int(str)
Run Code Online (Sandbox Code Playgroud)

更好:

try:
    return int(str)
except (TypeError, ValueError, OverflowError): #int conversion failed
    return None
Run Code Online (Sandbox Code Playgroud)

(请注意,在这种情况下,第二个版本要好得多,因为它正确处理前导+和 - ,并且值也在200到100亿之间(对于32位机器).不要通过预测所有可能的内容来混乱代码失败:只需尝试并使用适当的异常处理.)


S.L*_*ott 9

"我的python编码风格是否过于偏执?还是有办法提高可读性,同时保持它的万无一失?"

谁是你保护自己的傻瓜?

您?你担心你不记得你写的API吗?

一个梨?您是否担心下一个小隔间中的某个人会积极努力通过API传递错误的内容?您可以与他们交谈以解决此问题.如果您提供文档,它会节省大量代码.

一个完整的反社会人员会下载您的代码,拒绝阅读API文档,然后使用不正确的参数调用所有方法?您可以为他们提供哪些帮助?

"万无一失"编码并不是非常有用,因为所有这些场景都更容易以另一种方式解决.

如果你是对自己的傻瓜,也许这不是真的明智.

如果你是一个同事或同伴的傻瓜,你应该 - 或许 - 与他们交谈并确保他们理解API文档.

如果你对一些想要颠覆API的假想的反社会程序员进行傻瓜式的证明,那么你无能为力.这是Python.他们有源头.为什么当他们只能编辑源代码来破坏API时,他们会不会滥用API?