我已经定义了一个带有很长参数列表的函数.定义中的总字符数大于80,不符合PEP8.
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
Run Code Online (Sandbox Code Playgroud)
什么是避免水平滚动的最佳方法.
Bre*_*arn 79
PEP 8给出了一个例子:
class Rectangle(Blob):
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
Run Code Online (Sandbox Code Playgroud)
这是官方的答案.就个人而言,我讨厌这种方法,其中连续行具有与任何真实缩进级别不对应的前导空格.我的方法是:
class Rectangle(Blob):
def __init__(
self, width, height,
color='black', emphasis=None, highlight=0
):
Run Code Online (Sandbox Code Playgroud)
...或者让这条线超过80个字符.
Phi*_*aro 21
即使它使函数更加冗长,对于不止一个参数,我认为这是最好的——下面的例子来自Python
——:
def my_function(
argument_one,
argument_two,
argument_three,
argument_four,
argument_five,
):
...
Run Code Online (Sandbox Code Playgroud)
git diff
s变得非常简单,因为更改一个变量只会显示该更改。如果每一行都有多个论点,那么后面会在视觉上更烦人。
git diff
以后产生更好的结果。JavaScript
和 中很常见Dart
。一个好的约定好过一个坏的约定,但执行一个约定比对它们不必要地挑剔要重要得多。
一旦您决定使用标准,请与您的同事分享您的决定并使用自动格式化程序——例如,Prettier是JavaScript
in的流行选择VS Code
;并且该Dart
语言已经在全球范围内标准化了一个:dartfmt
- 始终如一地执行它,减少手动编辑的需要。
Rot*_*eti 13
对于使用"输入"类型检查器的Python代码,我建议:
def some_func(
foo: str,
bar: str = 'default_string',
qux: Optional[str] = None,
qui: Optional[int] = None,
) -> List[str]:
"""
This is an example function.
"""
print(foo)
...
Run Code Online (Sandbox Code Playgroud)
恕我直言,当使用类型注释时,单行中具有多个参数的变体看起来非常混乱.所以我认为最好让它们各自独立.
如果您使用"yapf",则可以在以下选项中使用以下选项.style.yapf
:
[style]
dedent_closing_brackets = true
split_arguments_when_comma_terminated = true
Run Code Online (Sandbox Code Playgroud)
kyl*_*e.a 10
def my_function(argument_one, argument_two, argument_three,
argument_four, argument_five):
Run Code Online (Sandbox Code Playgroud)
我个人也曾经想出过与@BrenBarn第二种风格相同的解决方案。我喜欢它能正确表示函数参数的缩进及其实现的方式,尽管“不高兴的表情”在某些其他人看来并不常见。
如今,PEP8专门提供了这种情况的示例,因此主流可能会采用这种样式:
# More indentation included to distinguish this from the rest.
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
Run Code Online (Sandbox Code Playgroud)
我个人喜欢将参数从左括号开始一行一行地排列起来,并保持缩进。flake8
似乎也对此感到满意。
def guess_device_type(device_name: str,
username: str=app.config['KEY_TACACS_USER'],
password: str=app.config['KEY_TACACS_PASS'],
command: str='show version') -> str:
"""Get a device_type string for netmiko"""
Run Code Online (Sandbox Code Playgroud)