我定义了带有一长串参数的函数。定义的总字符数超过80,并且不遵守PEP8。
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
避免水平滚动的最佳方法是什么?
Answers:
PEP 8中给出了一个示例:
class Rectangle(Blob):
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
这就是官方的答案。我个人讨厌这种方法,在这种方法中,连续行的前导空格不对应任何实际的缩进级别。我的方法是:
class Rectangle(Blob):
def __init__(
self, width, height,
color='black', emphasis=None, highlight=0
):
。。。或者只是让该行超过80个字符。
对于使用类型注释的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)
...
如果使用yapf,则可以在.style.yapf
以下位置使用这些选项:
[style]
dedent_closing_brackets = true
split_arguments_when_comma_terminated = true
尽管它使函数更加冗长,但对于多个参数,我认为这是最好的-以下示例来自Python
-:
def my_function(
argument_one,
argument_two,
argument_three,
argument_four,
argument_five,
):
...
git diff
s非常简单,因为更改一个变量将仅显示该更改。如果您在每一行上有多个参数,那么以后会在视觉上更加烦人。
git diff
以后产生了更好的结果。JavaScript
和中非常常见Dart
。好的约定比不好的约定要好,但是强制实施一个约定比对它们不必要地挑剔更为重要。
决定使用标准后,与同事分享您的决定并使用自动格式化程序-例如,Prettier是JavaScript
in中的流行选择VS Code
。并且该Dart
语言已在全球范围内标准化:dartfmt
—一致地执行它,从而减少了手动编辑的需要。
我发现自己这种方式很有趣:
def my_function(
argument_one, argument_two, argument_three,
argument_four, argument_five
):
...
它允许代码折叠很容易地揭示函数签名,例如,考虑以下代码片段:
def my_function(
argument_one, argument_two, argument_three,
argument_four, argument_five
):
s1 = 1
s2 = 2
if s1 + s2:
s3 = 3
def my_other_function(argument_one, argument_two, argument_three):
s1 = 1
s2 = 2
if s1 + s2:
s3 = 3
这种方式允许对整个文件进行代码折叠并立即查看所有功能/签名,即:
我个人喜欢以括号括起来并以缩进形式一行一行地排列参数。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"""
command
将创建伪造的差异线。3)进入功能块是确定的(这是不直观的,因为在python中,缩进通常会开始一个块)。
black
习惯于自动格式化我的代码。