我已经定义了一个包含很长参数列表的函数。定义中的总字符数大于80,并且不遵守PEP8。
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
什么是避免水平滚动的最佳方法。
答案 0 :(得分:61)
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个字符。
答案 1 :(得分:10)
def my_function(argument_one, argument_two, argument_three,
argument_four, argument_five):
答案 2 :(得分:8)
对于使用"typing"类型检查器的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
答案 3 :(得分:2)
我个人也经常提出与@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)
答案 4 :(得分:2)
我个人喜欢从开放的括号开始按顺序排列参数并保持缩进。 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"""
答案 5 :(得分:1)
我发现自己很有趣:
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
这种方式可以对整个文件进行代码折叠,并一次查看所有功能/签名,即:
答案 6 :(得分:1)
即使它使函数更加冗长,用于多个参数,但我认为这是最好的(下面的示例来自Python
):
def my_function(
argument_one,
argument_two,
argument_three,
argument_four,
argument_five,
):
...
git diff
非常简单,因为更改 one 变量只会显示那个更改。如果每一行上有多个参数,那么以后会在视觉上更烦人。
git diff
。JavaScript
和dart
中很常见。好的习惯比不好的习惯要好,但是强制执行一个习惯比对他们不必要地挑剔更为重要。
一旦您决定使用标准,请与同事分享您的决定并使用自动格式化程序-例如,Prettier是JavaScript
的流行选择VS Code
中的内容-始终如一地执行它,从而减少了手动编辑的需要。