zoukankan      html  css  js  c++  java
  • python PEP8常用规范(看完你会感谢我的!)

    完整的规范移步传送门

    pep8规范 官方文档:[https://www.python.org/dev/peps/pep-0008/](https://www.python.org/dev/peps/pep-0008/)

    PEP8中文翻译:[http://www.cnblogs.com/ajianbeyourself/p/4377933.html](http://www.cnblogs.com/ajianbeyourself/p/4377933.html)

    个人使用中常用的规范

    一、代码编排

    1)缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。

    2)每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。

    3)类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。

    二、文档编排

    1. 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
    import os
    import sys
    
    from tcp_server import online_user
    from threading import currentThread
    from lib import common
    
    from interface import common_interface, admin_interface, user_interface
    
    ...
    

    2 )不要在一句import中多个库,比如import os, sys不推荐。

    # 正确方式
    import os
    import sys
    from subprocess import Popen, PIPE
    # 错误方式
    import os,sys
    
    1. 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
    from myclass import MyClass
    from foo.bar.yourclass import YourClass
    
    # 如果和本地名字有冲突:
    import myclass
    import foo.bar.yourclass
    

    三、空行的使用

    总体原则,避免不必要的空格。

    • 各种右括号前不要加空格。
    • 逗号、冒号、分号不要加空格。
    • 函数的左括号不要加空格。如Func(1)。
    • 序列的左括号不要加空格。如list[2]。
    • 操作符左右各加一个空格,不要为了对齐增加空格。
    • 函数默认参数使用的赋值符左右省略空格
    • 不要将多句语句写在同一行.
    • if/for/while语句中,即使执行语句只有一句,也必须另起一行。

    四、注释

    总体原则,英文,简明。

    • 与代码自相矛盾的注释比没注释更差。修改代码时要优先更新注释
    • 注释是完整的句子。如果注释是断句,首字母应该大写,除非它是小写字母开头的标识符(永远不要修改标识符的大小写)。
    • 如果注释很短,可以省略末尾的句号。注释块通常由一个或多个段落组成。段落由完整的句子构成且每个句子应该以点号(后面要有两个空格)结束,并注意断词和空格。
    • 非英语国家的程序员请用英语书写你的注释,除非你120%确信代码永远不会被不懂你的语言的人阅读。
    • 注释块通常应用在代码前,并和这些代码有同样的缩进。每行以 '# '(除非它是注释内的缩进文本,注意#后面有空格)。注释块内的段落用仅包含单个 '#' 的行分割。
    • 慎用行内注释(Inline Comments) 节俭使用行内注释。 行内注释是和语句在同一行,至少用两个空格和语句分开。行内注释不是必需的,重复罗嗦会使人分心。不要这样做:
    • # 正确写法
      x = x + 1  # Compensate for border
      # 错误写法
      x = x + 1  # do nothing
      

      五、命名

      总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格。

      • b(单个小写字母)
      • B(单个大写字母)
      • lowercase(小写串)
      • lower_case_with_underscores(带下划线的小写)
      • UPPERCASE(大写串)
      • UPPER_CASE_WITH_UNDERSCORES(带下划线的大写串)
      • CapitalizedWords(首字母大写的单词串或驼峰缩写)
      • 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
      • 注意: 使用大写缩写时,缩写使用大写字母更好。故 HTTPServerError 比 HttpServerError 更好
        mixedCase(混合大小写,第一个单词是小写)
      • Capitalized_Words_With_Underscores(带下划线,首字母大写,丑陋

      六 、编码建议

      1 )编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率很高,都是Jython中却非常低,所以应该采用.join()的方式。
      2) 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
      3) 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
      4) 异常中不要使用裸露的except,except后跟具体的exceptions。
      5 )异常中try的代码尽可能少。比如:

      try:
          value = collection[key]
      except KeyError:
          return key_not_found(key)
      else:
          return handle_value(value)
      要优于
      try:
          return handle_value(collection[key])
      except KeyError:
          return key_not_found(key
      

      6 )使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如:

      if foo.startswith('bar'):优于
      if foo[:3] == 'bar':
      

      7) 使用isinstance()比较对象的类型。比如

      if isinstance(obj, int): 优于
      if type(obj) is type(1):
      

      8 )判断序列空或不空,有如下规则

      Yes: if not seq:
      if seq:
      

      优于

      No: if len(seq)
      if not len(seq)
      

      9 )字符串不要以空格收尾。

      文章转自:https://www.cnblogs.com/limengjie0104/p/8991430.html

  • 相关阅读:
    6.GC算法
    5.程序计算器、代码缓存、直接内存
    4.VM Stack(虚拟机栈)+ Native Method Stack(本地方法栈)
    3.Metaspace(元空间)
    2.Heap(堆区)
    1.JVM内存布局
    Cause: org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "goods_name")
    url参数由jsp传到controller乱码,直接修改tomcat就好了
    下拉框附带搜索框
    MyBatis if判断条件有特殊需求时的问题
  • 原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11774961.html
Copyright © 2011-2022 走看看