zoukankan      html  css  js  c++  java
  • 2-python开发的编码规范(PEP 8)&工程结构化

    前提:不要为了遵守PEP规范而破坏兼容性

    PEP 规范:

    1.主动换行

     ①在pycharm中的80个字符的分割线之前,主动换行

     ②不要设置自动换行,尽量自己主动换行

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

    if (name=="zhangsan", age==18, gender=="boy",
                hoppy=="reading"):
        pass

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

    #3.使用圆括号实现隐士连接 行
    foo = ('白日依山尽'
           '黄河入海流')
    foo1 = ('白日依山尽
    '
           '黄河入海流')
    print(foo)
    print(foo1)
    #output
    """
    白日依山尽黄河入海流
    白日依山尽
    黄河入海流
    """

    不建议使用 进行显示连接,如下:

    foo2 = '欲穷千里目'
        '更上一层楼'
    print(foo2)

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

    url = 'https://ke.qq.com/user/index/index.html#/signup'

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

    def fun(a,b):
        return a,b   #使用这种返回方式
    def fun2(c,d):
        return (c,d) #不要使用该方式
    print(fun(1,2))  #output:(1,2)
    print(fun2(3,4)) #output:(3,4)

    6.函数变量与起始变量对齐(便于对齐)

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

    7.四个空格缩进(相对于函数名)风格也可以

    foo = test(
        var1=1,
        var2=2,
        var3=3   
    )

    定义一个字典:

    dic = {
        "name":"zhangsan",
        "age":18
    }

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

    pycharm编辑器的格式化是遵循PEP8规范的

    ①顶级定义

    先定义2个顶级定义的函数,中间不空行,再格式化看看结果:

    def test1():
        pass
    def test2():
        pass

    在pycharm中,选择工具栏的code--》reformat code 进行格式化,再看看空行效果:顶级定义之间会空2行(静态代码检查功能

    def test1():
        pass
    
    
    def test2():
        pass

    ②方法定义

    class A:
        def test1(self):
            pass
        def test2(self):
            pass

    进行格式化后:方法之间有空1行

    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):
        
        S = 0       #初始值
        c = x + y   #求和
        s = x * y   #求积

    12.文档字符串---docstring

    双三引号中:

    第一部分:该函数实现的功能

    第二部分:函数中参数的介绍(param,args)

    第三部分:返回值,返回值举例

    第四部分:抛异常说明

    但是这几个部分也不是绝对的。

    类的注释

     13.注意:一个函数或类,只能有一个文档字符串,不能在代码块中再次进行文档字符串的注释

           如果非要子代码块中解释下面的代码,用#,多行表示

    def test():
        """
        
        :return: 
        """
        #先进行循环
        #再进行赋值到字典
        。。。。。

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

    例如:

    15.

      在循环中,使用 a += 1, 内存中会不同的生成a这个副本(临时变量),非常消耗内存。性能低

    效率高的方式,用一个list(是可变的),用append,添加完之后,再将list拼接为字符串( " ".join(items)),性能就很高了。

    16.为多行字符串使用三重双引号“”“,而非三重单引号。

       当且仅当项目中使用单引号来引用字符串时,才可能会用三重单引号

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

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

    18.# TODO,为临时代码使用

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

    19.每个导入独占一行

    导入顺序:

    标准库导入

    第三方库导入

    应用程序指定导入

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

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

     21.单下划线_ ,是受保护的 proected -----当前文件是可以用的,只是不能导出到别的文件用

    int a  表示的公共的,public

    _a = 10,是受保护的,其所在的模块.py被别的模块import时,_a不会被导入到别的模块去的。

     22.双下划线_ _  表示private,表示类里面的私有的实例方法 或 实例变量

    只能在这个类内部使用,别的类用不了。

     23.将相关类/顶级函数放在同一个.py中,不会限制一个文件一个类

     24.main

         即使是一个打算被用作脚本的文件,也应该是可导入的

    比如:一个简单的实现功能,不定义任何函数,那至少放在main()中。

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

    26.空序列的判断

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

     二、工程结构化

  • 相关阅读:
    《编写可维护的JavaScript》读书笔记
    第十四天:还是看代码
    第十三天:过了一遍rt_thread,看代码架构
    第十二天:rt_thread系统
    第十一天:要做stm32了
    第十天:没太专注工作
    第九天:rtc问题查找与测试
    第八天:android编译环境搭建
    第七天:终于看到板子了
    第六天和周末:感慨下这周
  • 原文地址:https://www.cnblogs.com/ananmy/p/14019576.html
Copyright © 2011-2022 走看看