共计 1767 个字符,预计需要花费 5 分钟才能阅读完成。
一、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