组团学

编程好习惯

阅读 (103813)

一、python2与python3的区别

1、性能

python3.x起始比python2.x效率要低,但是python3.x有极大的优化空间,效率正在追赶,目前已经不差多少

2、编码

python3.x原码文件默认使用utf-8,使变量名更为广阔

3、语法

  • 去除了<>,改用!=
  • / 除
    python2.x整型触发返回整数
    python3.x整型触发返回浮点数,整除使用//
  • 加入了nonlocal语句

  • 去除了print语句,加入了print()函数

    print("zutuanxue_com", end=" ") print("zutuanxue_com")
  • 去除了raw_input语句,加入了input()函数

  • 新的super(),可以不再给super()传递参数

    class A(object): pass class B(A): def init(self): super().int()
  • 改变了顺序操作符的行为,比如x<y,当x和y类型不匹配时抛出TypeError异常

  • 新式的8进制数字变量

4、字符串和字节串

  • python2.x 字符串以8bit字符串存储
  • python3.x 字符串以16bit Unicode字符串存储,现在字符串只有str一种类型

5、数据类型

  • python3.x去除了long类型,现在只有一种整数类型int,但是它的行为就像2.x中long

  • 新增了bytes类型,对应2.x版的八位串

6、面向对象

引入抽象基类

7、异常

所有异常都从BaseException继承,并删除了StardardError

python2 try: …… except Exception e: …… python3 try: …… except Exception as e: ……

8、其他

python2.x中的xrange()在python3.x中名为range()
file类被废弃
python2可以使用file(path)、open(path)

二、PEP8编码规范

网址:

英文教程:https://legacy.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

中文教程:https://blog.csdn.net/ratsniper/article/details/78954852

1、代码编排

  • 缩进4个空格,禁止空格与Tab混用
  • 行长79,防止单行的逻辑过于复杂
if 1: pass

2、命名

  • 除非在lamdba函数中,否则不要使用单字母的变量名,但是即使在lamdba函数中变量名也要尽可能有意义
  • 包名、模块名、函数名全部使用小写,单词使用下划线链接
  • 类名、异常名使用首字母大写的方法,异常名结尾加Error或者Warning
  • 全局变量尽量使用大写,同一类型的全局变量要加同一的前缀,单词用下划线链接
  • 自定义的变量、函数名等不要与标准库名冲突
  • 函数名必须有动词,最好是do_something的句式或者somebody_do_something句式
COLOR_RED = 10 COLOR_BLUE = 11 f = lambda x: x+1 def func(x, y): pass def get_money(): pass

3、注释

  • 忌讳没有注释和逐行注释

  • 行内注释

    当行逻辑过于复杂添加

  • 块注释

    一段逻辑开始时注释

  • 引入外来算法或者配置时必须在注释中添加源链接,标明出处

  • 函数和类尽量添加docstring

4、空格

  • :,;后面要跟一个空格,前面没有空格,行尾分号无需空格

  • 二元操作符前后各一个空格

    数学运算符、比较运算符、逻辑运算符、位运算符

  • =的注意事项:用于指示关键字参数或默认参数值时,不要添加空格

5、换行

  • 适当添加换行
  • 函数间

    • 顶级函数空间空2行

    • 类的方法空1行

  • 文件结尾留空一行

6、import

  • 不要使用from xxx import *
  • 导入顺序(标准库、第三方、自定义)
    • 标准库
    • 第三方库
    • 自定义库
  • 单行不要导入多个库
  • 模块内用不到的不要去import

7、字符串拼接

  • 字符串相加 (性能最差)

  • 字符串格式化

  • python3.6支持f操作符

    >>> a = 111 >>> b=222 >>> c=333 >>> s = f"{a}-{b}-{c}" >>> s '111-222-333'
  • join 尽量使用join方法,因为速度快,内存消耗小

8、语义

要求明确、直白

not x in y x not in y not x is y x is not y
需要 登录 才可以提问哦