在Python中打破嵌套函数/构造函数调用的正确方法是什么?

时间:2015-04-12 00:27:53

标签: python coding-style

根据PEP 8:

  

使用悬挂式缩进时,应采用以下注意事项;第一行应该没有参数,应该使用进一步的缩进来明确区分自己作为延续线。

假设我有类似的东西:

my_object = VeryLongClassName(long_function_name(arg1, arg2), arg3)

超过79个字符。我应该这样打破:

my_object = VeryLongClassName(
        long_function_name(arg1, arg2), arg3)

还是这个?

my_object = VeryLongClassName(long_function_name(
        arg1, arg2), arg3)

1 个答案:

答案 0 :(得分:2)

我使用以下方法,可以在各种情况下很好地扩展,并且可以保持线条短 - 从而使代码更容易在视觉上扫描。

my_object = VeryLongClassName(
    long_function_name(arg1, arg2),
    arg3,
)

这种方法有一些额外的好处:

  • 在定义large data structures(列表,dicts甚至JSON)时广泛使用它。使用模仿数据布局样式的编码样式非常方便。代码只是另一种形式的数据,对吗?

  • 它适用于大多数文本编辑器,它们从面向行的角度来看世界。如果函数或构造函数的每个参数都在一个单独的行上,代码重构很容易。

  • 它的应用是基于规则的,纯机械的。我从来不必为如何缩进代码而烦恼。

  • 因此,它看起来很整洁,管理原则立即明确。作为对比点,PEP 8中看到的indenting examples看起来像是一个大杂烩,因此无法提供非常明确的指导。

另一种策略是使用局部便利变量,尤其是在需要在方法中多次使用长名称的情况下。尽管创建短助记符会使代码更加模糊,但它通常有助于提高可读性,前提是您的代码已经组织在相当小的函数或方法中 - 再次因为它往往增强了对代码进行可视化扫描的便利性。 / p>

vlcn = VeryLongClassName
lfn = long_function_name
x = vlcn(lfn(arg1, arg2), arg3)
y = vlcn(lfn(arg4, arg5), arg6)