【问题标题】:Python PEP8 conventions [closed]Python PEP8 约定 [关闭]
【发布时间】:2014-09-08 18:02:20
【问题描述】:

我是一名 Python 初学者,我阅读了使用 Python 编程时必须遵循的 pep 标准 http://legacy.python.org/dev/peps/pep-0008

现在我有一个疑问。正如他们所提到的,在函数或字典中使用关键字参数或默认参数值时,不应在等号周围放置空格。

例如

def myfunc(key1=val1, key2=val2, key3=val3)

def myfunc(key1 = val1, key2 = val2, key3 = val3)

那很好,但是如果我将它们分解成多行怎么办。像这样(当我们有很多参数或长名称时)

def myfunc(key1=val1, key2=val2, key3=val3)

在这种情况下,我认为,我们应该在等号周围放置空格。我对么。因为这些都是关于可读性的,但我只是好奇是否也有标准。寻找最佳做法。

Dict 也是如此。

new_dict= Dict(
       key1=val1, 
       key2=val2, 
       key3=val3
)

与上面提到的示例不同,我是否应该在 dict 的最后一个参数后加逗号,我没有在最后一个值后加逗号 (key3=val3)

【问题讨论】:

  • 好吧,这是基于意见的,但这里有一个事实:PEP8 并未声明您在使用 Python 编程时必须遵循它,尽管许多人似乎被误导相信这一点。 PEP8 是 Python 中包含的标准库集的编码标准。要完全理解这意味着什么,请考虑以下几点:使用 C 编程时,每个人都应该遵循用于实现 stdlib.c 的编码标准吗?

标签: python python-2.7 python-3.x pep8 pep


【解决方案1】:

那很好,但是如果我将它们分解成多行怎么办。像这样(当我们有很多参数或长名称时)

def myfunc(key1=val1, 
       key2=val2, 
       key3=val3)

在您提供的代码中,您没有在 = 周围放置空格,因此您在运算符间距方面遵守 pep8(您的缩进不符合 pep8)。

一般来说,您可以随心所欲地编写代码。如果您不遵守 pep8,其他人通常不会觉得您的代码易于阅读。如果您的公司内部有当地标准,那应该取代 pep8。如果您没有指导您违反 pep8 的标准,您的同事可能会因为您违反 pep8 而讨厌您。

如果你根本没有标准,未来你也会讨厌现在的你。

【讨论】:

    【解决方案2】:

    PEP8clearly says:

    当用于表示关键字时,请勿在 = 号周围使用空格 参数或默认参数值。

    在这两种情况下,您都不需要在等号周围放置空格。

    如果您不确定您的代码是否遵循 PEP8 标准,请使用flake8 静态代码分析工具。如果出现代码样式违规,它会发出警告。

    例子:

    考虑等号周围有多余的空格:

    def myfunc(key1 = 'val1',
               key2 = 'val2',
               key3 = 'val3'):
        return key1, key2, key3
    

    flake8 为每个意外的空白输出一个警告:

    $ flake8 test.py
    test.py:3:16: E251 unexpected spaces around keyword / parameter equals
    test.py:3:18: E251 unexpected spaces around keyword / parameter equals
    test.py:4:16: E251 unexpected spaces around keyword / parameter equals
    test.py:4:18: E251 unexpected spaces around keyword / parameter equals
    test.py:5:16: E251 unexpected spaces around keyword / parameter equals
    test.py:5:18: E251 unexpected spaces around keyword / parameter equals
    

    【讨论】:

    • 我认为这并没有真正回答这个问题,尽管它也纠正了代码中的另一个 pep8 违规。
    • 看起来 OP 只是使用 8 个空格缩进(或制表符,喘气!),并没有尝试样式对齐。
    • @msw OP 在引用的代码中使用了 7 个空格。
    • 事实上@Marcin您的回答并没有真正回答我的问题,但是这个。我只是想知道哪个是正确的,这个答案足以消除我的疑虑。但它没有回答我在 dict 中最后一个 kwarg 之后关于逗号的最后一个问题
    • @user3810188 很高兴它有帮助。我已经编辑了答案以使其更具体。额外的逗号绝对不是违规。
    【解决方案3】:

    没有。声明 kwargs 时,不要在等号周围放置空格。可以这样想:如果你只是浏览代码行,你想训练你的眼睛,看看在普通程序流程中使用的赋值运算符(spam = True)和 kwarg 之间的区别,特别是如果它在自己的行上(垃圾邮件=真)。

    至于尾随逗号,我一直觉得尾随逗号向团队成员或读者暗示我觉得列表、字典、args 集等可能会在未来扩展。如果我相当确定该结构代表其成熟状态,我会将其移除。

    【讨论】:

    • 至少这个答案给出了一个很好的理由来说明 为什么 pep8 说 x 或 y 而不是仅仅引用它
    猜你喜欢
    • 2011-02-26
    • 2019-02-20
    • 2020-11-04
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多