一、Python编码规范(PEP 8)/工程结构化

2021-03-14 01:29

阅读:546

标签:应用   操作   hang   返回   错误   表示   对齐   其他   应用程序   

1.主动换行

  • 在pycharm中的80个字符的分割线之前,主动换行
  • 不要设置自动换行,尽量自己主动换行

2.合理使用括号去实现隐式连接

if (width == 0 and height == 0 and color == red and 
       emphasis == strong):

3.使用圆括号实现隐士连接

str1= (zhang
       jingxue)
str2 = (zhang\n
       jingxue)
print(str1)
print(str2)
"""
zhangjingxue
zhang
jingxue
"""

不建议使用\ 进行显示连接

str2 = zhang       jingxue

4.注释中,如果出现URL,一定要写在一行

url = http://192.168.30.124:50084/biz/project-task-50-byModule-54.html

5.不要在返回值或着条件语句中使用括号,除非需要数学计算或者行连接

def fun1(a,b):
    return a,b   #正确
def fun2(c,d):
    return (c,d) #错误

6.函数变量与起始变量对齐

def test_zjx(var1,var2,var3,var4,
         var5,var6,var7):
    pass

7.四个空格缩进

foo = long_function_name(
    var_one, var_two, var_three,
    var_four)

 8.顶级定义之间空2行,方法定义之间空1行

pycharm编辑器的格式化是遵循PEP8规范的,pycharm中,选择工具栏的code--》reformat code 进行格式化

顶级定义:
def
test1(): pass def test2(): pass
方法定义:
class
A: def test1(self): pass def test2(self): pass

9.括号里不要有空格

def test(name = None, age = None):   # 错误
    pass

def test(name=None, age=None):  #正确
    pass

10.逗号,冒号,分号后面加空格

def test(x,y):   # 错误
    pass

def test(x, y):  # 正确
    pass

11.不要用空格垂直对齐注释

def test(x, y):    
    sum = x + y        #求和
    chengji = x * y    #求积

12.文档注释(文档字符串--docstring)

  • 该函数实现的功能
  • 函数中参数的介绍(param,args)
  • 返回值,返回值举例
  • 抛异常说明

技术图片

 

13.代码块中,对于复杂的操作, 应该在其操作开始前写上若干行注释. 对于不是一目了然的代码, 应在其行尾添加注释.绝不要描述代码

# We use a weighted dictionary search to find out where i is in
# the array. We extrapolate position based on the largest num
# in the array and the array size and then do binary search to
# get the exact number.
if i & (i-1) == 0: # true iff i is a power of 2

14.如果一个类不继承其他类,就显式的从object继承,嵌套类也是一样

class OuterClass(object):
    class InnerClass(object):
        pass    

15. 避免在循环中用++=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表

正确:
items = []
for last_name, first_name in employee_list:
    items.append( % (last_name,first_name))
    items.append(
%s, %s
) employee_table = ‘‘.join(items) 错误: employee_table = for last_name, first_name in employee_list: employee_table += % (last_name,first_name) employee_table +=
%s, %s

16.为多行字符串使用三重双引号“”“,而非三重单引号。当且仅当项目中使用单引号来引用字符串时, 才可能会使用三重‘‘‘

17. 关闭类文件对象的方法,对于不支持使用"with"语句的类似文件的对象,使用contextlib.closing():

import contextlib
with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
  for line in front_page:
    print line

注意:扩展:同时含有‘__enter__‘,  ‘__exit__‘, 这2个属性的文件,才支持with。没有这2个属性,不支持with打开文件的,就要使用上面的方法。

技术图片

 

 18. 为临时代码使用TODO注释, 它是一种短期解决方案. 不算完美, 但够好了.TODO注释应该在所有开头处包含"TODO"字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么. 主要目的是为了有一个统一的TODO格式
# TODO(Wuji) Change this to use relations.

def fun():
    
    #TODO 后期实现的功能
    pass

19.每个导入独占一行

导入顺序:

  • 标准库导入
  • 第三方库导入
  • 应用程序指定导入
#不推荐:
import sys, os
#但是可以这样:
from subprocess import Popen, PIPE

20.在没有else的情况下,if语句可以单独在一行

def fun(x,y):
    if x > 0: y = x + y
    return y

21.用单下划线(_)开头表示模块变量或函数是protected(使用import * from时不会包含). 单下划线_ ,是受保护的 proected -----当前文件是可以用的,只是不能导出到别的文件用

  • int a  表示的公共的,public
  • _a = 10,是受保护的,其所在的模块.py被别的模块import时,_a不会被导入到别的模块去的。

22. 用双下划线(__)开头的实例变量或方法表示类内私有 private,----只能在这个类内部使用,别的类用不了。

23. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块

24. main
即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中

Python, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if __name__ == ‘__main__‘ , 这样当模块被导入时主程序就不会被执行.

def main():
    ...

if __name__ == __main__:
    main()

25.所有行限制最大的字符数是79

26.空序列的判断

#正确: 
if not seq:
if seq:

#错误
if len(seq):
if not len(seq):

27.不要用==去和布尔值比较

正确: if greeting:
糟糕: if greeting == True:
更糟: if greeting is True:

技术图片

 

一、Python编码规范(PEP 8)/工程结构化

标签:应用   操作   hang   返回   错误   表示   对齐   其他   应用程序   

原文地址:https://www.cnblogs.com/zhangjx2457/p/14026335.html


评论


亲,登录后才可以留言!