您当前的位置:首页 > 编程技术

Python3编码规范:PEP8中文版

时间:2021-07-26 16:45:38  来源:网络    编辑:本站  点击:
  1. 代码布局  
  2. 1. 缩进  
  3.   
  4. 每级缩进用4个空格。括号中使用垂直隐式缩进或使用悬挂缩进。  
  5. 正确示范:  
  6.   
  7. # (垂直隐式缩进)对准左括号  
  8. foo = long_function_name(var_one, var_two,  
  9.                          var_three, var_four)  
  10.   
  11. # (悬挂缩进) 一般情况只需多一层缩进  
  12. foo = long_function_name(  
  13.     var_one, var_two,  
  14.     var_three, var_four)  
  15.   
  16. # (悬挂缩进) 但下面情况, 需再加多一层缩进, 和后续的语句块区分开来  
  17. def long_function_name(  
  18.         var_one, var_two, var_three,  
  19.         var_four):  
  20.     print(var_one)  
  21.   
  22. # 右括号回退  
  23. my_list = [  
  24.     123,  
  25.     456,  
  26. ]  
  27. result = some_function_that_takes_arguments(  
  28.     'a''b''c',  
  29.     'd''e''f',  
  30. )  
  31.   
  32. 2.最大行宽  
  33.   
  34. 每行最大行宽不超过 79 个字符,一般续行可使用反斜杠,括号内续行不需要使用反斜杠  
  35. 正确示范:  
  36.   
  37. # 无括号续行, 利用反斜杠  
  38. with open('/path/to/some/file/you/want/to/read') as file_1, \  
  39.      open('/path/to/some/file/being/written''w') as file_2:  
  40.     file_2.write(file_1.read())  
  41.   
  42. # 括号内续行, 尽量在运算符后再续行  
  43. class Rectangle(Blob):  
  44.   
  45.     def __init__(self, width, height,  
  46.                  color='black', emphasis=None, highlight=0):  
  47.         if (width == 0 and height == 0 and  
  48.                 color == 'red' and emphasis == 'strong' or  
  49.                 highlight > 100):  
  50.             raise ValueError("sorry, you lose")  
  51.         if width == 0 and height == 0 and (color == 'red' or  
  52.                                            emphasis is None):  
  53.             raise ValueError("I don't think so -- values are %s, %s" %  
  54.                              (width, height))  
  55.   
  56. 3. 空行  
  57.   
  58. 两行空行用于分割顶层函数和类的定义  
  59. 单个空行用于分割类定义中的方法  
  60. 正确示范:  
  61.   
  62. # 类的方法定义用单个空行分割,两行空行分割顶层函数和类的定义。  
  63. class A(object):  
  64.     def method1():  
  65.         pass  
  66.   
  67.     def method2():  
  68.         pass  
  69.   
  70.   
  71. def method3():  
  72.     pass  
  73.   
  74.   
  75. 5. 模块导入  
  76.   
  77. 导入的每个模块应该单独成行,导入顺序如下: (各模块类型导入之间要有空行分割,各组里面的模块的顺序按模块首字母自上而下升序排列)   
  78. 1.标准库  
  79. 2.相关的第三方库  
  80. 3.本地库  
  81. 正确示范:  
  82.   
  83. # 按模块首字母排序导入, 依此递推  
  84. import active  
  85. import adidas  
  86. import create  
  87.   
  88. 6. 字符串  
  89.   
  90. 单引号和双引号作用是一样的,但必须保证成对存在,不能夹杂使用. (建议句子使用双引号, 单词使用单引号, 但不强制.)  
  91.   
  92. # 单引号和双引号效果一样  
  93. name = 'JmilkFan'  
  94. name = "Hey Guys!"  
  95.   
  96.   
  97. 7.表达式和语句中的空格  
  98.   
  99. 括号里边避免空格  
  100. 正确示范:  
  101.   
  102. spam(ham[1], {eggs: 2})  
  103.   
  104. 逗号,冒号,分号之前避免空格   
  105. 正确示范:  
  106.   
  107. if x == 4print x, y; x, y = y, x  
  108.   
  109. 函数调用的左括号之前不能有空格  
  110. 正确示范:  
  111.   
  112. spam(1)  
  113. dct['key'] = lst[index]  
  114.   
  115. 赋值等操作符前后不能因为对齐而添加多个空格  
  116. 正确示范:  
  117.   
  118. x = 1  
  119. y = 2  
  120. long_variable = 3  
  121.   
  122. 二元运算符两边放置一个空格,涉及 = 的复合操作符 ( += , -=等),比较操作符 ( == , < , > , != , <> , <= , >= , in , not in , is , is not ),逻辑操作符( and , or , not )  
  123. 正确示范:  
  124.   
  125. a = b  
  126. or b  
  127.   
  128. # 括号内的操作符不需要空格  
  129. name = get_name(age, sex=None, city=Beijing)  
  130.   
  131. 8. 注释  
  132.   
  133. 注释块   
  134. 注释块通常应用在代码前,并和代码有同样的缩进。每行以 ‘# ’ 开头, 而且#后面有单个空格。  
  135. 正常示范:  
  136.   
  137. # Have to define the param `args(List)`,   
  138. # otherwise will be capture the CLI option when execute `python manage.py server`.  
  139. # oslo_config: (args if args is not None else sys.argv[1:])  
  140. CONF(args=[], default_config_files=[CONFIG_FILE])  
  141.   
  142.   
  143. 单行注释(应避免无谓的注释)  
  144.   
  145. 文档字符串  
  146. 多行文档, 首行首字母大写,结尾的 """ 应该单独成行,单行的文档, 结尾的 """ 在同一行。  
  147.   
  148. 9. 命名规则  
  149.   
  150. 包和模块名:   
  151. 包和模块名应该简短,全部用小写字母, 多字母之间可以使用单下划线连接。  
  152.   
  153. 类名:   
  154. 遵循驼峰命名  
  155.   
  156. class MyClass(object):  
  157.     pass  
  158.   
  159. 全局变量名:   
  160. 全局变量名应尽量只在模块内部使用, 对可能使用语句 from moduleName import variableName 而被导入的模块,应采用 __all__ 机制来防止全局变量被别的模块导入, 或者在全局变量名开头加一个前置下划线.  
  161.   
  162. 正确示范:  
  163.   
  164. _name = 'name'  
  165.   
  166. 函数名   
  167. 函数名应该为全部小写的凹驼峰规则。  
  168. 正确示范:  
  169.   
  170. vcenter_connection  
  171.   
  172. 常量名   
  173. 常量全部使用大写字母的凹驼峰规则来表示, 通常在模块顶格定义  
  174.   
  175. 正确示范:  
  176.   
  177. MAX_OVERFLOW = ''  
  178. TOTAL = 1  
  179.   
  180. 方法名和实例变量   
  181. 非公开方法和实例变量开头使用前置下划线,有时候可能会为了避免与子类命名冲突,采用两个前置下划线,需要注意的是: 若 class Foo 的属性名为 __a, 该属性是不能以 Foo.__a 的方式访问的(执著的用户还是可以通过Foo._Foo__a 来访问), 所以通常双前置下划线仅被用来避免与基类的属性发生命名冲突。  
  182.   
  183. 10. 编程建议  
  184.   
  185. None 的比较用 is 或 is not,而不要用 ==,用 is not 代替 not … is, 前者的可读性更好  
  186.   
  187. 正确示范  
  188.   
  189. if foo is not None  
  190.   
  191. 使用函数定义关键字 def 代替 lambda 赋值给标识符, 这样更适合于回调和字符串表示  
  192.   
  193. 正确示范:  
  194.   
  195. def f(x):   
  196.     return 2*x  
  197.   
  198.   
  199. 异常类应该继承自Exception,而不是 BaseException,捕获异常时尽量指明具体异常, 尽量不用 except Exception, 应该捕获 出了什么问题,而不是 问题发生  
  200.   
  201. 正确示范  
  202.   
  203. #捕获具体异常  
  204. try:  
  205.     import platform_specific_module  
  206. except ImportError:  
  207.     platform_specific_module = None  
  208.   
  209. try/except 子句中的代码要尽可能的少, 以免屏蔽掉其他的错误  
  210. 正确示范:  
  211.   
  212. try:  
  213.     value = collection[key]  
  214. except KeyError:  
  215.     return key_not_found(key)  
  216. else:  
  217.     return handle_value(value)  
  218.   
  219. 函数或者方法在没有返回值时要明确返回 None  
  220. 正确示范:  
  221.   
  222. def foo():  
  223.     return None  
  224.   
  225. 使用字符串方法而不是 string 模块 ,使用 .startswith() 和 .endswith() 代替字符串切片来检查前缀和后缀 ,startswith() 和 endswith 更简洁,利于减少错误  
  226.   
  227. 正确示范:  
  228.   
  229. if foo.startswith('bar'):  
  230.   
  231. 使用 isinstance() 代替对象类型的比较  
  232.   
  233. 正确示范:  
  234.   
  235. if isinstance(obj, int):  
  236.   
  237. 空序列类型对象的 bool 为 False:  
  238. 正确示范:  
  239.   
  240. if not seq:  
  241.    pass  
  242. if seq:  
  243.    pass  
  244.   
  245. 不要用 == 进行 bool 比较  
  246. 正确示范  
  247.   
  248. if greeting:  
  249.    pass  
点赞
返回首页
返回
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航

| 传统文化 | 武术天地 | 编程技术 | 好听音乐 | 养生中医 | 智慧人生 | 常用工具 | 写作园地 | 影视娱乐 | php专栏 | 道德经专栏 |
最新推荐
python内建函数大全(built-in functions)
python内建函数大…
点击按钮(button)打开新窗口(window)
点击按钮(button)…
帝国cms网络视频引用代码--具体操作教程
帝国cms网络视频引…
相关文章
栏目更新
栏目热门