2

我是 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)

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

字典也是如此。

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

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

4

3 回答 3

5

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

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

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

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

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

于 2014-07-17T18:23:45.943 回答
3

PEP8明确表示

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

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

如果您不确定您的代码是否遵循 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
于 2014-07-17T18:26:44.033 回答
2

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

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

于 2014-07-17T18:23:24.893 回答