我应该使用camelCase来遵守pep-8线路长度吗?

时间:2014-07-22 18:11:28

标签: python

我开始严格遵守PEP-8,因为我认为在选择和选择我喜欢的东西之前我至少应该尝试一下。

然而,似乎存在冲突。他们强烈建议将每一行限制为79个字符,但他们强烈建议使用方法和变量名称use_underscores_between_words。

在典型的行上,您嵌套在

class -> 
    method -> 
        loop -> 
            conditional -> 
                my_var_name += do_some_function(some_parameter, another_parameter)

你已经有79 - 16 = 63个字符可供使用,而你只是在下划线上浪费了6个字符。所以上面的行已经太长了,实际上很短。

如果我不得不经常计算字符,或者将这样的基本线分成几行,那么生产力似乎会受到影响。

我明白,现在它说“如果你的团队同意,使用99”,但似乎这应该是标准,或者说camelCaseVars应该是标准,因为我们非常喜欢短线。

编码符合标准的Python的问题在于,如果不使用神秘的名称或违反行长度或命名约定,我似乎无法编写任何代码。我可以在这里发布我的代码以向您展示我的具体问题,但上面的示例代表了我的代码问题。

哪种理想不那么重要?清楚的名字,短线或using_underscores?

更新:虽然没有人真正提出这个问题,但我觉得使用较少的描述性/功能和变量名称实际上是默认的问题。我知道人们会说“当然不是,只是包裹你的线条”,但在实践中,它似乎是“使用非常短的名字”和“包裹线”的混合,但坚持80。

我认为这就是人们的所作所为,但我认为在商业项目层面,生产力为王,团队刚刚抛弃了这条规则并跃升至120.目前,我认为我只会坚持到79很多(imho)丑陋的线条包裹,并且因为我能够在小型显示器上并排查看2个文件而感到安慰。

3 个答案:

答案 0 :(得分:2)

Python Zen说:

  

Flat比嵌套好。

因此,考虑通过代码分解来减少代码的嵌套 - 通过将一些部分提取到单独的方法或函数中来减少嵌套代码。而且你的编辑器中总会有足够的水平空间。

<强>更新

对于具有条件的嵌套循环,您还可以通过分解来降低嵌套级别。

例如,您可以更改此代码:

class MyClass(BaseClass):

    def my_method():
        for item in self.my_collection:
            if item.numeric_property % 2:
                self.my_property = item.other_property + item.age * self.my_coefficient
        self.do_other_stuff()

到这一个:

class MyClass(BaseClass):

    def my_method():
        """People see what happen because of clear names"""
        self.process_my_collection()
        self.do_other_stuff()

    def process_my_collection():
        """People see what happen because of clear names.
        They probably don't even need to read your math from
        process_my_collection_item(item) at all.
        And you make the code more flat as well.
        """
        for item in self.my_collection:
            self.process_my_collection_item(item)

    def process_my_collection_item(item):
        """The most people don't need to read these calculations every time
        since they just know it's working and tested
        but they'd like to work with methods above frequently:
        """
        if not item.numeric_property % 2:
            return
        self.my_property = item.other_property + item.age * self.my_coefficient

正如您所看到的,我将一个方法划分为几个简单的操作,并使其更少嵌套。

答案 1 :(得分:1)

您的目标应该是编写易于理解的代码。

一般来说,坚持PEP8可以让您更接近目标。如果您的代码和/或您的团队的性质使得camelcase更好地工作,那么一定要使用camelcase。

话虽这么说,如果你认为保存六个字符是你所认为的典型行是导入的,也许这会告诉你你的典型行嵌套太深,并且有一个比更改命名约定更好的解决方案

答案 2 :(得分:1)

使用下划线,这是每个人都期望的。

- 但是 - 79个字符限制是更容易预留的建议之一。我的团队使用带有119个字符行的pep8,但绝大多数行都不到80个字符。