编程好习惯
阅读 (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