GIL
Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或Python 2.x,tickets计数达到100
深拷贝、浅拷贝
copy.copy对于可变类型,会进行浅拷贝,对于不可变类型,不会拷贝,仅仅是指向
copy.deepcopy
私有化
_x: 单前置下划线,私有化属性或方法,
from somemodule import *禁止导入
__xx:双前置下划线,避免与子类中的属性命名冲突
名字重整, (_Class__object)
__xx__:双前后下划线,用户名字空间的
魔法对象或属性
xx_:单后置下划线,
用于避免与Python关键词的冲突
sys.path
封装 继承 多态
封装
函数加变量封装到一起, 提供给每一个需求者一份函数(功能)+变量(数据)
保护或者防止代码(数据)被我们无意中破坏
代码复用
继承
多态
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
实例方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。
实例方法:由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls;
静态方法:由类调用;无默认参数;
property
装饰器法
类属性法
私有属性的get和set方法
魔法方法
__new__ __init__ __del__ __str__ __repr__
__doc__ __name__ __module__ __class__ __call__
__dict__
with 与上下文管理器
任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字
避免出现异常, close无法执行
mysql数据库
库, 表, 数据
增删改查
sql语句的参数化,可以有效防止sql注入, 创建列表, 把参数放在列表里, 列表在传参
pyton直接创建游标和数据库交互
import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root',
password='mysql', database='ji', charset='utf8')
csl = conn.cursor()
count = csl.execute(sql)
count # 受影响的行数
csl.fetchone() # 对应查询sql语句打印结果
csl.fetchall()
conn.commit() # 默认开启事务
csl.close()
conn.close()
视图
create view 视图名称 as select语句; #以v_开头最好
show tables
select * from v_stu_score
drop view v_stu_score
事务
原子性, 一致性, 隔离性, 持久性
begin;
commit;
rollback;
索引
create index 索引名称 on 表名(字段名称(长度))
show index from 表名;
drop index 索引名称 on 表名;
mysql主从配置
主配置, 从配置
冷备份
热备份 从 > 主日志SHOW MASTER STATUS;
网络通信
过程
ip+子网掩码(区分网络号主机号)
集线器
路由器
MAC地址: 网卡的序列号
DNS 域名解析服务器
默认网关
NAT(网络地址转换器)
闭包-装饰器
闭包
函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
装饰器
外层函数传入被装饰的函数引用func, 内部函数在调用的时传入参数*args, **kwargs
内部函数包含的原来的函数执行接收参数*args,**kwargs
当装饰器需要传入参数时, 装饰器外面在套一层函数接收函数
WSGI
WSGI允许开发者将选择web框架和web服务器分开。
可以混合匹配web服务器和web框架,选择一个适合的配对
miniweb
WSGI接口
路由的实现
一般URL分为静态URL、动态URL、伪静态URL
静态URL, 每个网页有真实的物理路径,也就是真实存在服务器里的
优点:打开速度快,网址结构比较友好,利于记忆
中大型网站,则产生的页面特别多,不好管理
动态URL, 带有?号的URL,我们一般称为动态网址,每个URL只是一个逻辑地址,
优点:修改页面很方便,好管理
缺点:打开速度稍慢,URL结构稍稍复杂,不利于记忆。
伪静态URL
优点:URL比较友好,利于记忆
缺点:设置麻烦,服务器要支持重写规则
epoll
epoll采用的是事件通知机制
epoll = select.epoll()
epoll.register(socket_tcp.fileno(), select.EPOLLIN|select.EPOLLET)
while True:
# epoll 进行 fd 扫描的地方 -- 未指定超时时间则为阻塞等待
epoll_list = epoll.poll()
# 对事件进行判断
for fd, events in epoll_list:
元类
元类就是用来创建类的“东西”。
元类就是类的类
type就是Python在背后用来创建所有类的元类
ORM 即对象-关系映射
创建一个实例对象,用创建它的类名当做数据表名,
用创建它的类属性对应数据表的字段,
当对这个实例对象操作时,能够对应MySQL语句
logging日志
日志级别