【问题标题】:Python style for `chained` function calls`chained` 函数调用的 Python 风格
【发布时间】:2012-08-08 20:56:21
【问题描述】:

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

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 风格指南:

可以通过包装表达式将长行分成多行 在括号内。这些应该优先使用 反斜杠用于续行。确保缩进续 适当地划线。打破二进制文件的首选位置 运算符在运算符之后,而不是在它之前。

【问题讨论】:

  • 风格指南是一个指南;当它不适合您当前的情况时忽略它。 :-)
  • 您可以在大多数编辑器中使用自动缩进来实现您的第二个示例,并且它避免使用 `\` - 这恰好是我的个人风格 - pastebin.com/8Ld9sX5G
  • 我更喜欢将表达式放在括号中,并在点之后单独的方法,每行一个(function. 而不是.function
  • 感谢您引用 python 风格指南

标签: python styles


【解决方案1】:

由于有左括号,我更喜欢以下内容,它避开了non-recommended \

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

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

类似的\-less 结构通常也适用于字符串文字,因此它们不会超出建议的每行 79 个字符的限制:

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

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

Python 的代码格式 不错。

【讨论】:

  • 对正确的缩进样式感到好奇,我找到了style guide
【解决方案2】:

这个选项怎么样:

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

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

【讨论】:

    【解决方案3】:

    不引用我自己的偏好(尽管请参阅您的问题的 cmets :))或替代答案是:

    在您已经拥有的任何项目上坚持样式指南 - 如果没有说明,请尽可能与其余代码库的样式保持一致。

    否则,请选择您喜欢的样式并坚持下去 - 并以某种方式让其他人知道,如果在单行上不合理可读(或者您希望描述它),您会喜欢这样编写链式函数调用。

    【讨论】:

      猜你喜欢
      • 2012-07-26
      • 2017-06-12
      • 1970-01-01
      • 2012-05-03
      • 2011-12-20
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多