环境:django,numpy,matplotlib,
解释语言:开发效率高,通用性强,内置方便的数据容器,易于扩展和嵌入。
语言:lua--嵌入式/网络/APP,erlang--嵌入式,python--网络/嵌入式,lisp--界面。
程序员境界:线性级,逻辑级,架构级,工程级
程序员陋习:自我,封闭,惯性,沟通障碍,一叶障目,工作量估计乐观,拒绝变化,拒绝重构。
笛卡尔方法论:拆分,排序,处理,归并。
项目管理:计划,组织,执行,控制。
数据类型:数值,字符串,纯性容器(list,tuple),hash容器(dict,set), none, 逻辑类型。
一个物理行使用多个逻辑行时用分号分开。
缩进:同层次语句相同缩进,不要混合使用空白和制表符,不同平台无法工作,建议一律使用4个空格。
lamda表达式,
函数:关键参数,文档字符串,闭包。
eval()
repr()
面向对象:类的实例化,类的封装,专用类,类属性,私有函数。
封装继承多态。
类的初始化:
Class a:
def __init__(self):
self.m=1
类的实例化:
c=a()
c.__class__
c.__doc__
type(c)
str(c)
与大多数的语言不同,一个 Python 函数,方法,或属性是私有还是公有,完全取决于它的名字。如果一个 Python 函数,类方法,或属性的名字以两个下划线开始(但不是结束),它是私有的;其它所有的都是公有的。
try-except处理:
我们把所有可能引发错误的语句放在try
块中,然后在except
从句/块中处理所有的错误和异常。except
从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try
从句,至少都有一个相关联的except
从句。
你还可以让try..catch
块关联上一个else
从句。当没有异常发生的时候,else
从句将被执行。
模块与包:__init__.py,
文件操作:open,write,read,readlines,seek,os.listdir,os.walk。
python内置容器
1) 列表 List
定义
访问
切片操作
嵌套
内置函数
2) 元组 Tuple
定义
类似list的访问方式
不可变对象
类型转换
隐式tuple调用
数据交换
拆封与解封
3) 字典 Dict
字典的声明
简单使用
keys()和values()
排序问题及解决
4) 集合 Set
定义方式
set--唯一集合
演示合并功能
类型转换
5) map,reduce ,filter
6) 迭代器与生成器,协同和半协同:yield
并行的世界
n 串行与并行
n 阻塞与非阻塞任务
n 共享与冲突
n 多线程与多进程的区别和特点
多进程
n Linux、unix平台专属
n Fork
n wait
n Waitpid
n pipe和singal
n 守护进程
多线程
n Thread
n Threading
n 共享变量与临界资源
n 锁机制
python正则表达式
n 正则表达式的使用
n re.compile()
n 正则表达式介绍
n 贪婪模式和非贪婪模式
n re模块的其他工具
表达式对象:match,find,search。
元字符
一般字符
.除换行符的任意字符 DOTALL
\ 转义字符
[...] 字符集合
\d 数字:[0-9]
\D 非数字[^0-9]
\s 空白字符[<空格>\t\r\n\f\n]
\S 非空白字符[^\s]
\w 单词字符[A-Za-z0-9_]
\W 非单词字符[^\w]
匹配前一个字符0或者多次
+ 匹配前一个字符1次或者多次
? 匹配前一个字符0次或者1次
{m} 匹配前一个字符m次
{m,n} 匹配前一个字符m至n次
数量词? 变成非贪婪模式
边界
^ 匹配字符串开头,多行匹配每一行开头
$ 匹配字符串末尾,多行匹配每一行末尾
\A 仅匹配字符串开头
\Z 仅匹配字符串末尾
\b 匹配\w 和 \W 之间
逻辑、分组
| 左右表达式任意匹配一个, 先匹配左边一旦成功则跳过匹配右边,如果|没有包含在()中,匹配整个正则表达式
(...) 分组匹配,从左到右,每遇到一个 ( 编号+1 分组后面可加数量词
(?P<name>...) 除了分组序号外,指定一个 name的别名
\<number> 引用编号为<number>的分组匹配到的字符串
(?P=name) 引用别名为<name>的分组匹配到的串
特殊构造
(?:...) (...)不分组版本,用于使用 | 或者后接数量词
(?iLmsux) iLmsux的每个字符代表一个匹配模式,只能用在正则表达式的开头,可选多个
(?#...) #号后的内容将作为注释
(?=...) 之后的字符串内容需要匹配表达式才能成功匹配
(?!...) 之后的字符串不匹配表达式才能成功
(?<=...) 之前的字符串需要匹配表达式才能成功
(?<!...) 之前的字符串需要不匹配表达式才能成功
(?(id/name) yes |no) 如果编号为id/名字为name的组匹配到字符串,则需要匹配yes,否则匹配no,no可以省略
iLmsux
I re.I 忽略大小写
L re.L 使用预定字符类 \w \W \b \B \s \S 取决当前区域设定
m re.M 多行模式改变^ 和 $ 的行为
s re.S . 任意匹配模式
u re.U 使用预定字符类 \w \W \b \B \s \S \d \D 取决unicode定义的字符属性
x re.X 详细模式,可以多行,忽略空白字符,并且可以加入注释
re:
n re.compile(strPattern[, flag])
n pattern
n match
n search
n split
n findall
n finditer
n sub
Socket开发服务端
import socket
HOST = '127.0.0.1'
PORT =27001
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(2)
conn,addr = s.accept()
print 'Connect by ',addr
while 1:
data = conn.recv(1024)
print data
if not data :break
conn.send(data)
conn.close()
socket开发客户端
import socket
HOST ='127.0.0.1'
PORT = 27001
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((HOST,PORT))
s.send("hello")
data = s.recv(1024)
print repr(data)
s.close()
socket高级应用(非阻塞)
n select 通过select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。 缺点在于单个进程能够监视的文件描述符的数量存在最大限制,linux默认1024。文件描述符数量的增大,其复制的开销也线性增长。
n poll 同select类似,但没有文件描述符的限制
n epoll 内核直接支持,基于事件就绪,注册和call back
django网站 的安装与配置
n easy_install django
n python setup.py install
n django_admin.py
n manager.py settings.py urls.py
MTV模式
n MVC模式 request,reponse,url.py,View.py,html。
django的命令 manage.py
n startnewapp
n syncdb
n runserver –noreload
n sqlrest
官方doc 的使用
n https://docs.djangoproject.com/en/1.4/
n 官方doc的结构
n search
TWISTED
n 一个基于事件驱动,异步的python高性能(?)网络开发框架
n 1核心
n http://twistedmatrix.com/trac/wiki
u Reactor
u Protocol
u Factory