用于`chained`函数调用的Python样式

时间:2012-08-12 07:51:08

标签: python styles

我们越来越多地使用链式函数调用:

value = get_row_data(original_parameters).refine_data(leval=3).transfer_to_style_c()

可能很长。要在代码中保存长行,这是首选吗?

value = get_row_data(
    original_parameters).refine_data(
    leval=3).transfer_to_style_c()

或:

value = get_row_data(original_parameters)\
       .refine_data(leval=3)\
       .transfer_to_style_c()

我觉得使用反斜杠\并将.function添加到新行是件好事。这使得每个函数调用都有自己的行,它很容易阅读。但这听起来不是很多人喜欢的。当代码发生微妙的错误时,当它很难调试时,我总是开始担心它可能是backslash (\)之后的空格。

引用Python样式指南:

  

通过包装表达式可以在多行上分割长行   在括号内。这些应该优先使用a   行继续的反斜杠。确保缩进继续   恰当地排队。打破二进制文件的首选位置   操作员是在操作员之后,而不是在操作员之前。

3 个答案:

答案 0 :(得分:15)

由于有一个左括号,我倾向于选择以下内容,这会避开non-recommended \

value = (get_row_data(original_parameters)
         .refine_data(level=3)
         .transfer_to_style_c())

这种语法的一个优点是每个方法调用都在它自己的行上。

类似的\ - 更少的结构对于字符串文字通常也很有用,因此它们不会超出每行限制推荐的79个字符:

message = ("This is a very long"
           " one-line message put on many"
           " source lines.")

这是一个单个字符串文字,由Python解释器有效创建(这比求和字符串要好得多,字符串在内存中创建多个字符串并多次复制它们,直到最后一个字符串为止获得)。

Python的代码格式 很好。

答案 1 :(得分:1)

这个选项怎么样:

value = get_row_data(original_parameters,
            ).refine_data(leval=3,
                ).transfer_to_style_c()

请注意,如果没有其他参数,则逗号是多余的,但我保留它们以保持一致性。

答案 2 :(得分:1)

不引用我自己的偏好(虽然看到你的问题的评论:))或替代答案是:

坚持你已经拥有的任何项目的风格指南 - 如果没有说明,那么尽可能保持与代码库的其余部分一致。

否则,选择一个你喜欢的风格并坚持下去 - 让其他人知道你是如何理解如果在一行上没有合理的可读性(或者你想描述它)的话,你可以写出链式函数调用。