python进阶
编码规范:
1.缩进4个空格,禁止空格与Tab混用
2.行长80:防止单行逻辑过于复杂
import
1.不要使用 from xxx import *
2.顺序
标准库
第三方库
自定义库
3.单行不要import 多个库
4.模块内用不到的不要去import
空格
- : , ; 后面跟一个空格,前面无空格(行尾分号后无空格)
- 当 = 用于指示关键字参数或默认参数值时,不要在其两侧使用空格
适当添加空行
1.函数间:顶级函数间空2行,类的方法之间空1行
2.函数内:同一函数内的逻辑块之间空1行
3.文件结尾:留一个空行
注释
1.忌:逐行添加注释,没有一个注释
2.行内注释:单行逻辑过于复杂时添加
3.块注释:一段逻辑开始时添加
4.引入外来算法或者配置时须在注释中加原链接,标明出处
5.函数和类尽可能添加 docstring
命名
1.除非在lambda函数中,否则不要用单字母的变量名(即使是lambda函数中的变量名也应该尽可能的有意义)
2.包名、模块名、函数名、方法名全部使用小写,单词间用下划线连接
3.类名、异常名使用CapWords(首字母大写)的方式,异常名结尾加Error或Wraning后缀
4.全局变量尽量使用大写,一组同类型的全局变量要加上统一前缀,单词用下划线连接
装饰器
最简单的装饰器
def deco(func):
print(func)
def warp():
print('hahah')
return warp
@deco
def A():
print('Joker')
A()
执行流程是
A()------deco ------func:A ------return warp:warp() ------"hahah"
例题
输入2个数字,装饰器的作用是求这两个数字的和,本函数的作用是打印这两个数字的和
def deco(func):
def warp(n,n1):
sum_ = n + n1
return func(sum_,n1)
return warp
@deco
def A(name,name2):
print(name)
A(10,15)
在使用装饰器的情况下,无论你输入什么验证码都返回验证码错误;如果不使用,该正确就正确
(带装饰器的传参)
import random
def deco2(parms):
def deco(func):
def warp(*args,**kwargs):
if parms:
kwargs['n1'] = -1
return func(*args,**kwargs)
return warp
return deco
@deco2(True)
def A(n1,n2):
if n1 == n2:
print('验证码正确')
else:
print('验证码错误')
num = random.randrange(1000,9999)
print('验证码是:%d'%num)
num2 = int(input('>>'))
A(n1=num,n2=num2)
检测某个时间段内(5秒)ip访问的次数,如果Ip的访问次数超过10次,则返回404
import time
TIME1 = 0
TIME2 = 0
def check_ip(func):
def warp(*args,**kwargs):
if round(abs(TIME2 - TIME1),3) < 0.5:
print('404')
else:
return func(*args,**kwargs)
return warp
@check_ip
def A(ip):
print('进入网页成功')
#模拟请求
for _in range(50):
ip = '127.0.0.1'
TIME1 = time.time()
A(ip)
TIME2 = time.time()
time.sleep(1)
进程和线程
import multiprocessing
def A():
print('hello')
if __name__ == "__main__":
#创建进程
p = multiprocessing.Process(target=A,args=())
p.start() #启动进程
p.join()
print('Over')