写在前面:

A Foolish Consisitency is the Hobgoblin of Little Minds.

尽信书,则不如无书。

有时候编码规范的建议并不

写在前面:

A Foolish Consisitency is the Hobgoblin of Little Minds.

尽信书,则不如无书。

有时候编码规范的建议并不适用,应根据自己的判断再决定是否使用,特别是不要为了遵守PEP约定而破坏兼容性。

比如以下情况:

1. 当遵守规范后代码的可读性变差。

2. 出与要与周围的代码保持一致。

3. 有问题的代码是出现编码规范之前编写的,并且没有充足的理由修改。

4. 代码需要兼容不支持编码规范的老版本Python。 

一 、代码布局

1. 1 缩进

每一级缩进使用4个空格。

续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。

推荐:

适用,应根据自己的判断再决定是否使用,特别是不要为了遵守PEP约定而破坏兼容性。

比如以下情况:

1. 当遵守规范后代码的可读性变差。

2. 出与要与周围的代码保持一致。

3. 有问题的代码是出现编码规范之前编写的,并且没有充足的理由修改。

4. 代码需要兼容不支持编码规范的老版本Python。 

一 、代码布局

1. 1 缩进

每一级缩进使用4个空格。

续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。

推荐:

# 与左括号对齐
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# 用更多的缩进来与其他行区分
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# 挂行缩进应该再换一行
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

四空格的规则对于续行是可选的:

# 挂行缩进不一定要用4个空格
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

当if语句的条件部分长到需要换行写的时候,可以在两个字符关键字的连接处(比如if),增加一个空格,再增加一个左括号来创造一个4空格缩进的多行条件。这会与if语句内同样使用4空格缩进的代码产生视觉冲突。PEP没有明确指明要如何区分if条件代码和内嵌代码。可使用的选项包括但不限于下面几种情况:

# 没有额外的缩进
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

# 增加一个注释,在能提供语法高亮的编辑器中可以有一些区分
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

# 在条件判断的语句添加额外的缩进
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

在多行结构中的大括号/中括号/小括号的右括号可以与内容对齐单独起一行作为最后一行的第一个字符,如:

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

或者也可以与多行结构的第一行第一个字符对齐,如:

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)

1.2 制表符与空格的选择

空格是首选的缩进方式。

制表符只能用于与同样使用制表符缩进的代码保持一致。 

Python3不允许同时使用空格和制表符的缩进。 混合使用制表符和空格缩进的Python2代码应该统一转成空格。 当在命令行加入-t选项执行Python2时,它会发出关于非法混用制表与空格的警告。当使用–tt时,这些警告会变成错误。强烈建议使用这样的参数。 

1.3 行的最大长度

所有行限制的最大字符数为79。

没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72。 

限制编辑器窗口宽度可以使多个文件并行打开,并且在使用代码检查工具(在相邻列中显示这两个版本)时工作得很好。 

大多数工具中的默认封装破坏了代码的可视化结构,使代码更难以理解。避免使用编辑器中默认配置的80窗口宽度,即使工具在帮你折行时在最后一列放了一个标记符。某些基于Web的工具可能根本不提供动态折行。

一些团队更喜欢较长的行宽。如果代码主要由一个团队维护,那这个问题就能达成一致,可以把行长度从80增加到100个字符(更有效的做法是将行最大长度增加到99个字符),前提是注释和文档字符串依然是72字符折行。 

Python标准库比较保守,需要将行宽限制在79个字符(文档/注释限制在72个)。 

Python较长的代码行选择在小括号,中括号以及大括号中使用隐式续行方式。通过小括号内表达式的换行方式将长串折成多行。这种方式应该优先使用,而不是使用反斜杠续行。

反斜杠有时依然很有用。比如,比较长的,多个with状态语句,不能使用隐式续行,所以反斜杠是可以接受的:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

另一种类似情况是使用assert语句。确保在续行进行适当的缩进。

 

参考博客:https://www.cnblogs.com/bymo/p/9567140.html

posted on 2019-03-07 17:05  回忆唯U你  阅读(30)  评论(0)    收藏  举报