黑猫

我觉得我每天吃饱喝足往床上一躺侧着身子玩手机的样子,简直就是对旧社会里大烟鬼子抽大烟的情景昨日重现。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

     关于PEP8的详细说明可以参考官方原文:http://legacy.python.org/dev/peps/pep-0008/

    我参考官方文档及其他文章,摘出相关内容而得此文章,具体参考其他文章见文中最后参考资料处。

    当想要让自己所写的代码为更多人使用、交流学习时,不能写出只有机器认识的代码,而是对于人而言具有良好的可读性,此时就需要遵从一个公共的约束来规范自己的代码,那么《Style Guide for Python Code(PEP8)》是个很好的选择。

    首先PEP8中声明,有以下有理由忽略特定的规范:

    使用规范会降低代码可读性可不遵守;

    为了与其他代码保持一致可以不遵守规范(这种情况也许是历史原因);

    因为代码早于引进规范并且没有必要理由去修改代码时,可以不遵守规范;

    代码需要兼容不支持代码风格建议的旧版本python时可不遵守。

1 代码布局

1.1    缩进

    每个缩进使用4个空格。

    python是靠缩进区分语句块的,语句块缩进不正确是无法通过语法检查的,这种是必须遵守的;

    跨行的语句需要遵守下面规范(英语不行,暂时就不翻译了,意会下):

    Continuation lines should align wrapped elements either vertically using Python's implicit line joining inside parentheses, brackets and braces, or using a hanging indent [7]. When using a hanging indent the following should be considered; there should be no arguments on the first line and further indentation should be used to clearly distinguish itself as a continuation line.

    指的是续行应该和括起来的内容垂直对齐,或者使用叫hanging indent的格式。

    下面是符合规范的例子:

 1 # Aligned with opening delimiter.
 2 foo = long_function_name(var_one, var_two,
 3                          var_three, var_four)
 4 
 5 # More indentation included to distinguish this from the rest.
 6 def long_function_name(
 7         var_one, var_two, var_three,
 8         var_four):
 9     print(var_one)
10 
11 # Hanging indents should add a level.
12 foo = long_function_name(
13     var_one, var_two,
14 var_three, var_four)
15 # Hanging indents *may* be indented to other than 4 spaces.
16 foo = long_function_name(
17   var_one, var_two,
18   var_three, var_four)
19 # No extra indentation.
20 if (this_is_one_thing and
21     that_is_another_thing):
22     do_something()
23 
24 # Add a comment, which will provide some distinction in editors
25 # supporting syntax highlighting.
26 if (this_is_one_thing and
27     that_is_another_thing):
28     # Since both conditions are true, we can frobnicate.
29     do_something()
30 
31 # Add some extra indentation on the conditional continuation line.
32 if (this_is_one_thing
33         and that_is_another_thing):
34     do_something()
35 my_list = [
36     1, 2, 3,
37     4, 5, 6,
38     ]
39 result = some_function_that_takes_arguments(
40     'a', 'b', 'c',
41     'd', 'e', 'f',
42     )
43 my_list = [
44     1, 2, 3,
45     4, 5, 6,
46 ]
47 result = some_function_that_takes_arguments(
48     'a', 'b', 'c',
49     'd', 'e', 'f',
50 )
View Code

    下面是不符合规范的例子: 

1 # Arguments on first line forbidden when not using vertical alignment.
2 foo = long_function_name(var_one, var_two,
3     var_three, var_four)
4 
5 # Further indentation required as indentation is not distinguishable.
6 def long_function_name(
7     var_one, var_two, var_three,
8     var_four):
9     print(var_one)
View Code

1.2     使用tab还是空格

    空格是更好的选择,尽量不要空格和tab混用。Python3中不允许混用的方式,python2中可以使用-t或-tt参数进行检查,混用时前者会产生警告,后者会产生错误。

1.3    单行最大长度79个字符

1.4    空白行:顶级函数和类定义之间使用两个空白行,类中函数定义之间使用单个空白行。

1.5    源文件编码格式:官方说python3用UTF-8,python2用ASCII,我觉得最好都用UTF-8。

1.6    模块导入应该单号导入一个,除from xxx import a, b这种外;导入语句应该放在源文件最前面,紧跟着模块注释和文档描述之后,在模块全局变量和常量之前。模块应按照顺序导入:最先导入系统标准模块,再导入相关第三方模块,最后导入本地自己编写的模块。

 

posted on 2016-06-05 23:34  amtoor  阅读(221)  评论(0编辑  收藏  举报