Python 进阶
来源:互联网 发布:西绪福斯 知乎 编辑:程序博客网 时间:2024/06/11 23:03
Python 进阶
Python 的惯例和规范
- PEP8
not xx in yy
vsxx not in yy
a not is b
vsa is not b
- 下划线 _
- 命名惯例
- 类名: 首字母大写
- 函数名: 小写字母,下划线连接
- 全局变量: 大写, 且在开头声明
- 普通变量: 小写
- 一个函数只做一件事情,并把这件事做好
- 函数名必须有动词,最好是 do_something 的句式,或者 somebody_do_something 句式
Python 的赋值和引用,
==
和is
, copy, deepcopy迭代器, 生成器, itertools, yield, 列表/字典/集合的推导
method
,classmethod
和staticmethod
Python 魔术方法
__str__
,__repr__
__new__
和__init__
- 比较运算、数学运算
- 容器方法:
__len__, __iter__, __contains__, __getitem__, __setitem__, __missing__
__call__
- with:
__enter__, __exit__
__setattr__, __getattr__, __getattribute__, __dict__
__set__, __get__
__slots__
和内存优化
Python 性能之困
- Profile,timeit
- GIL 全局解释器锁
- 瓶颈在哪里:
- 计算密集型: 用 C 语言补充
- I/O 密集型: 多线程 / 多进程 / 协程,阻塞 -> 非阻塞, 同步 -> 异步
- 什么是同步、异步、阻塞、非阻塞?
- 什么是进程、线程、协程?
- 进程: 资源消耗大,系统整体开销大,数据通信不方便
- 线程: 资源消耗小,可共享数据。上下文开销大。按时间片强制切换,不够灵活
- 协程: 上下文切换开销更小,内存开销更小。可根据事件切换,更加有效的利用 CPU
- 事件驱动 + 多路复用
- 轮询: select, poll
- 事件驱动: epoll 有效轮询
- Greenlets / gevent / asyncio
- 线程安全, 锁
- 获得锁之后,一定要释放,避免死锁
- 获得锁之后,执行的语句,只跟被锁资源有关
- gevent
- gevent.sleep 非阻塞式等待
- Queue 协程间数据交互,避免竞争
装饰器
- 检查、预处理
- 缓存
- 其他
- 闭包 (TODO: 其他例子)
一些技巧和误区
- 格式化打印 json
- 确保能取到有效值
x.get(k, dft)
d.setdefault
defaultdict
a or b
- try…except… 的滥用
- 利用 dict 做模式匹配
- inf, -inf, nan
*args
,**kwargs
,foo(x, y, *, z, **kwargs)
, 强制显式参数 *- pyenv, venv, 命名空间
- property
- 要批量修改、存取,避免循环内单步获取:
for range(): db.get()
vsdb.mget()
- 三元运算: x = a if foo() else b
- else 字句: if, for, while, try
- foo(a, b=[])
- collections
- defaultdict
- namedtuple
- Counter
项目中的代码管理
- venv
- 代码结构管理,目录树
- git
- clone
- status
- add
- commit
- push
- pull
- merg
- checkout
- branch
补充
- history|sort|uniq
- django, blog
- 写文章
- 看文章
- 查看文章列表
- 根据题目搜索文章
- 可以评论
- 分享一些图书
HTTP 状态码
- 500 服务器内部错误
- 502 网关错误
- 404 找不到页面
- 403 拒绝访问
- 303 重定向
- 302 重定向
- 200 OK
阅读全文
0 0
- Python进阶
- Python进阶
- Python 进阶
- Python进阶
- Python进阶
- Python -- 进阶
- python进阶
- python进阶
- python 进阶
- Python进阶
- python 进阶
- 【Python】进阶
- python 进阶
- Python进阶
- Python进阶
- python进阶
- python进阶
- Python进阶
- 实验吧解题笔记——编程(二)
- 命令行的AT指令测试工具
- 第三周项目二
- Android Studio 无线ADB 设置
- Java.lang.NoSuchMethodError: 后带 V/Z等字母的
- Python 进阶
- GKMersenneTwisterRandomSource
- spark是什么及体系概述
- Linux网络之端口号常见知识点
- c++类实例在内存中的分配
- AndroidStudio的简单计算器(带优先级)开发小程序~
- 自定义view基础
- Postgresql如何使得查询语句输出到文件
- C++中的类所占内存空间