Python进阶
1.PEP8编码规范:缩进4个空格 = 1个tab
行长:80防止单行逻辑过于复杂
2.import :不要使用 (from xxx import *)
单行内不 import 多个库
顺序:标准库,第三方库,自定义库
3.空格:(:,;)后跟空格,前面无空格
名字(二元操作符前后各一个空格) | 符号 |
---|---|
数学运算符 | + - * / // = & |
比较运算符 | == != > < >= <= is not in |
逻辑运算符 | and or not |
位运算符 | & ^ << >> |
4.添加空行:适当添加空行
5.注释:忌逐行加注释和没有一个注释
6.命名规则
规则 | |
---|---|
变量名 | 除 lambda函数外 不能使用单字母的变量名 |
包名、模块名、函数名、方法名 | 方法名全部小写,单词间_连接 |
类名、异常名 | 使用首字母大写方式,异常名结尾加 Error 或 wraning |
全局变量 | 尽量使用大写 |
7.字符串拼接:join
8.*和 *2的用法
返回类型 | |
---|---|
* | 元组() |
** | 字典{key :value} |
强制命名(传参时后者必须命名)
9.== 判断的是值,is判断的是内存地址
浅拷贝copy和深拷贝deepcopy
10.函数闭包格式:
def num():
l = []
def bar(i):
l.append(i)
return l
return bar#返回bar函数
if __name__ == "__main__":
n = num()
11.装饰器格式:
def deco(func):
def warp():
print('i')
return func()
return warp
@deco#装饰器
def A():
print('j')
A()
装饰器流程:调用A()函数—>deco —>func:A—>return warp—>print(‘i’)—>返回函数A
---->print(‘j’)
12案例:用随机数写出验证码给装饰器传入参数,当正常执行时正常输出,还有一种情况不管验证码对与否都输出验证码不正确
import random
def deco(parms):
def deco2(func):
def warp(*args,**kwargs):
if parms:
kwargs['n1'] = -1#让n1的值等于 -1
return func(*args,**kwargs)
return warp
return deco2
@deco(True)#给装饰器传入参数两种True和False
def A(n1,n2):
if n1 == n2:
print('验证码正确')
else:
print('验证码错误')
num = random.randrange(1000,9999)
print('验证码')
num2 = int(input('>>'))
A(n1 = num,n2 = num2)
13.案例2:请求一个网站 5秒内请求10次以上则返回404,否则正常登陆
import time
TIME1 = 0
TIME2 = 0
def c_ip(func):
def warp(*args,**kwargs):
if round(abs(TIME2-TIME1),3)<0.5:
print('404')
else:
return func(*args,**kwargs)
return warp
@c_ip
def A(ip):
print('成功进入网页')
#模拟请求
for i in range(50):
ip = '127.0.0.1'
TIME1 = time.time()
A(ip)
TIME2 = time.time()
time.sleep(0.5)#每隔多长时间请求一次
14.进程和线程(一个进程下可以包含多个线程)
并发:在一个时间段,处理多个任务,单核也可以并发
并行:在同一个时刻,处理多个任务,必须多核才能并
创建进程,接受元组形式,可以传参
import multiprocessing
def jc():
print('Hello world')
if __name__ == "__main__":
#创建进程
p = multiprocessing.Process(target=jc,args=())
p.start()#启动进程
p.join()#进程阻塞
print('ok')