编码规范
1.PEP8编码规范,以及开发中的一些惯例和建议
-
代码编排:
缩进4个空格,禁止空格与Tab混用
行长80:防止单行逻辑过于复杂 -
import
不要使用:from xxx import *
顺序:1.标准库 2.第三方库 3.自定义库
单行不要import多个库
模块内用不到不要去import -
空格
: , ;后面跟一个空格,前面无空格(行尾分号后无空格)
二元操作符前后各一个空格,包括以下几类:
1.数学运算符:+ - * / // = & |
2.比较运算符:== != > < >= <= is nor in
3.逻辑运算符:and or not
4.位运算符:& | ^ << >>
当=用于指示关键字参数或默认参数值,不要在其两侧是用空格 -
适当添加空行
函数间:顶级函数间空2行,类的方法之间空一行
函数内:同一函数内的逻辑块之间,空一行
文件结尾:留一个空行(Unix中\n是文件的结束符) -
注释:
忌:逐行加注释,没有一个注释
行内注释:单行逻辑过于复杂时添加
块注释:一段逻辑开始时添加
引入外来算法或者配置时须在注视中添加源连接,标明出处
函数和类尽可能添加 -
命名
除非在lambda函数中,否则不要使用单字母的变量名(即使时lambda函数中的变量名也尽可能的有意义)
包名、模块名、函数名、方法名全部使用小写,单词间用下划线连接
类名、异常名使用CapWords(首字母大写)的方式,异常名结尾加Error或Wraning后缀
全局变量尽量使用大写,一组同类型的全局变量要加上统一前缀,单词用下划线连接 -
字符串拼接尽量使用join方式:速度快,内存消耗小
-
语义明确、直白
-
程序的构建
一个函数只能做一件事,并把这件事做好
大的功能用小函数之间灵活组合来完成
避免编写庞大的程序,”大“意味着体积庞大,逻辑复杂甚至混乱 -
函数名必须有动词最好是do_something的句式,或者somebody_do_something句式
-
自定义的变量名、函数名不要与标准库的名字冲突
* 和 **的用法
- *args:返回元组
- **kwargs:返回字典
- 强制命名参数
由上图可知强制命名参数传参时必须带上参数名
Python的赋值和引用
- ==和is的区别:
==:判断的是值
is:判断的是内存地址(即对象的id) - copy和deepcopy的区别:
copy:只拷贝表层元素
deepcopy:在内存中重新创建所有的子元素
函数闭包
装饰器
1.最简单的装饰器(没有参数)
上图的运行过程:A() ----deco(先走装饰器)----func:A----return warp:warp()----"haha"
2.有参数的装饰器
案例:
上图的运行过程:A(lala,tata) ----deco(先走装饰器)----func:A----return warp:warp()----“登陆失败”----return func(n1,n2)就相当于A()----lala,tata
进程和线程
注:进程是相互独立的
练习:
练习一:输入两个数字,装饰器的作用是求这两个数字的和;本函数的作用是打印这两个数字的和
练习二:流氓验证码:在使用装饰器的情况下,无论输入什么验证码都返回验证码错误;如果不使用,该正确就正确
运行结果:
运行结果:
练习三:检测某个时间段内(5秒)IP访问的次数,如果IP的访问次数超过10次,则返回404