| typora-copy-images-to | assets |
|---|
pydev:http://www.pydev.org/updates
pip install
python -m pip install --upgrade pip
管理员权限打开cmd
安装的包路径
pip list 查看安装的模块
Sublime 代码提示/补全插件 Anaconda
Ctrl + ` 调出命令窗口
Ctrl + shift + p 调出install package界面,输入install package
LookupError: unknown encoding: cp65001
chcp 65001 就是换成UTF-8代码页
chcp 936 可以换回默认的GBK
chcp 437 是美国英语
1252 拉丁 1 字符 (ANSI)
tab代码补全
- AdvancedNewFile
- Djaneiro
- Emmet
- Git
- Side Bar
- HTML/CSS/JS Prettify
- Python PEP8 Autoformat 格式化python代码
- SublimeCodeIntel
- ColorPicker
- OmniMarkupPreviewer
# 单行注释
'''
多行注释
'''
# coding=utf-8
print()
raw_input()
input() 接收表达式
Ctrl+C 退出程序
格式化输出
| 格式符号 | 转换 |
|---|---|
| %c | 字符 |
| %s | 通过str() 字符串转换来格式化 |
| %i | 有符号⼗进制整数 |
| %d | 有符号十进制整数 |
| %u | 无符号十进制整数 |
| %o | 十进制整数 |
| %x | 十六进制整数(⼩写字⺟) |
| %X | 十六进制整数(⼤写字⺟) |
| %e | 索引符号(小写'e') |
| %E | 索引符号(大写“E”) |
| %f | 浮点实数 |
| %g | %f和%e 的简写 |
| %G | %f和%E的简写 |
global,在函数中修改全局变量
引用,id()
- python中的变量不需要先定义,再使用,可以直接使用,还有重新使用用以存储不同类型的值。
- 变量命名遵循C命名风格。
- 大小写敏感。
- 变量引用计数。
- del语句可以直接释放资源,变量名删除,引用计数减1。
- 变量内存自动管理回收,垃圾收集。
- 指定编码在文件开头加入 # coding:UTF8或者 #coding=utf8
- 变量本身类型不固定的语言称之为动态语言
>>> a = 12 #无需定义,直接使用,python解释器根据右值决定左侧类型
>>> print a
12
>>> id(a) #变量a在内存中的编号
136776784
>>> type(a) #a的类型为int类型
<class 'int'>
>>> b = 12.34
>>> print b
12.34
>>> id(b) #变量b在内存中所占内存编号
3071447616
>>> type(b)
<class 'float'> #b的类型为float
>>> a = "itcast" #变量a从新指向一个字符串
>>> print a
itcast
>>> id(a) #变量a在内存中的编号为保存“itcast”地方,原来a所指向的内存编号里内容并没有立即释放
3071127936
>>> type(a) #变量a现在指向一个字符串
<class 'str'>
>>> c = b
>>> print c
12.34
>>> id(c) #变量c保存的内存中的编号和b一致
3071447616
>>> type(c)
<class 'float'>
>>> b = 12 #解释器在内存中发现有保存12的这个单元,于是变量b指向了此单元,减少了存储空间的反复申请与释放
>>> id(b)
136776784
>>> type(b)
<class 'int'>
>>> print b
12
>>> print a
itcast
>>> del(a)
>>> print a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined- 整型:通常被称为是整型或整数,是正或负整数,不带小数点。
- 长整型:无限大小的整数,整数最后是一个大写(或小写)的L。
- 浮点型:浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
- 复数:复数的虚部以字母J 或 j结尾 。如:2+3j
- 布尔类型:True , False
- 字符串:单引号,双引号,三个单引号扩起来
获取变量的数据类型 type(var_name)
r'' 表示 '' 内部的字符串默认不转义
'''...''' 的格式表示多行内容
编码:
Unicode u'...'
“可变长编码”的 UTF-8
# coding = utf-8
ord() , chr() , encode() , decode()
len()
格式化 %s %d
整数
int()
isinstance()
空值None
list
- append()
- insert()
- pop()
- pop(i)
- +组合列表
- *重复列表
- count()
- extend()
- index()
- remove()
- sort()
- reverse()
- ()
- tuple一旦初始化就不能修改
- {}
- get()
- pop(key)
- iteritems()
- itervalues()
- 单列集合,唯一,无序
- add()
- remove()
字符串
- replace()
序列都可以进行的操作包括索引,切片,加,乘,检查成员。 序列中的每个元素都分配一个数字 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
列表和元组二者均能保存任意类型的python对象,索引访问元素从开始 列表元素用[]包括,元素个数,值都可以改变 元组元素用()包括
通过切片 [][:] 得到子集,此操作同于字符串相关操作 切片使用的基本样式[下限:上限:步长]
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
Python包含以下函数:
| 函数 | 功能描述 |
|---|---|
| cmp(list1, list2) | 比较两个列表的元素 |
| len(list) | 列表元素个数 |
| max(list) | 返回列表元素最大值 |
| min(list) | 返回列表元素最小值 |
| list(seq) | 将元组转换为列表 |
Python包含以下方法:
| 方法 | 功能描述 |
|---|---|
| list.append(obj) | 在列表末尾添加新的对象 |
| list.count(obj) | 统计某个元素在列表中出现的次数 |
| list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
| list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
| list.insert(index, obj) | 将对象插入列表 |
| list.pop(obj=list[1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
| list.remove(obj) | 移除列表中某个值的第一个匹配项 |
| list.reverse() | 反向列表中元素 |
| list.sort([func]) | 对原列表进行排序 |
| 方法声明 | 功能说明 |
|---|---|
| find() | |
| index() | |
| count() | |
| decode() | 解码 |
| encode | 编码 |
| replace() | 分割字符串 |
| split() | |
| capitalize() | |
| center() | |
| endswith() | |
| startswith() | |
| expandtabs() | |
| isalnum() | |
| isalpha() | 是否是字母 |
| isdigit() | 是否是数字 |
| isspace() | 是否是空格 |
| istitle() | |
| isupper() | 是否是大写 |
| lower() | 转成小写 |
| 格式 | 符号转换 |
|---|---|
| %c | 字符 |
| %s | 通过str() 字符串转换来格式化 |
| %i | 有符号⼗进制整数 |
| %d | 有符号⼗进制整数 |
| %u | ⽆符号⼗进制整数 |
| %o | ⼋进制整数 |
| %x | ⼗六进制整数(⼩写字⺟) |
| %X | ⼗六进制整数(⼤写字⺟) |
| %e | 索引符号(⼩写'e') |
| %E | 索引符号(⼤写“E”) |
| %f | 浮点实数 |
| %g | %f和%e 的简写 |
| %G | %f和%E的简写 |
| 方法声明 | 功能描述 |
|---|---|
| time() | |
| localtime() | |
| struct_time() | |
| asctime() | 接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日周二 18时07分14秒)的24个字符的字符串 |
| clock() | 用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用 |
| sleep() | |
| 方法声明 | 功能描述 |
|---|---|
| month() | |
| firstweekday() | |
| isleap() | |
| leapdays() | |
| monthcalendar() | |
| monthrange() | |
| prcal() | |
| prmonth() | |
| setfirstweekday() | |
| timegm() | |
| weekday() | |
ASCII → Unicode → UTF-8(可变长编码)
ord()
chr()
encode()
len()
格式化%:%s,%d,%?,%f,%x,%%
for in
range()
Built-in Functions
- raw_input()
-
type()
-
id()
-
isinstance()
-
abs()
-
cmp()
-
sum()
-
max()
-
min()
-
list()
-
range()
-
del()
-
enumerate()把一个list变成索引-元素对
-
sort()
可以返回多个值
缺省参数printinfo( name, age = 35 )
不定长参数fun(a, b, *args, **kwargs)
lambda函数
默认参数,默认参数必须指向不变对象
定义函数def,pass
可变参*args
*list *tuple
关键字参数**
参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数
函数作为参数
- L[m:n] m到n个
- L[:n] 前n个
- L[-n:] 后n个
- L[-2:-1]
- L[:10:2]
- L[::5]
- L[:]
for in , enumerate()
range()
- next()
- generator也是可迭代对象
- 函数中包含yield
- 高阶函数:abs() map() reduce() filter() sorted(),函数作为参数,函数作为返回值,内部函数
- 闭包:返回函数不要引用任何循环变量,或者后续会发生变化的变量
- 匿名函数,lambda
- 装饰器,_name_,@语法,@functools.wraps(func)
- 偏函数,functools.partial,init.py
每一个包目录下面都会有一个 __init__.py 的文件
setuptools
- easy_install
- pip
安装命令
pip install PIL
- 当前目录
- 内置模块
- 第三方模块
sys.path 搜索路径
sys.path.append()添加搜索路径,运行时失效
PYTHONPATH,与设置Path环境变量类似
' a test module ',任何模块代码的第一个字符串都被视为模块的文档注释
__author__
import sys
__xxx__,例如:__name__(运行测试) , __author__
import cStringIO as StringIO
__xxx__
_xxx private 函数或变量
__xxx private
__future__
from __future__ import division
from __future__ import unicode_literals
__init(self)__ 初始化或者构造方法
self
私有__(两个下划线)
__xxx私有变量,访问私有变量_类名__变量名
_xxx 非私有变量,但不要随意访问
__xxx__特殊变量
isinstance()
TypeType
dir() 获取一个对象的所有属性和方法
set,get,has方法
限制class的属性,仅对当前类起作用,对继承的子类是不起作用的
把一个方法变成属性调用
class Student(object)
额外的功能,扩展
java中的toString()
属性不存在时,动态返回一个属性
返回程序开发者看到的字符串,是为调试服务的
遍历
通过下标取元素
__setitem__()
__delitem__()
实例调用
callable() 判断一个对象是否是“可调用”对象
__len__
__len__()
__dict__
获取一个类或变量的类型,或者创建一个类
元类,XxxMetaclass(type),应用:ORM全称“Object Relational Mapping”
同步IO
异步IO
回调模式
轮询模式
| 方法声明 | 功能描述 |
|---|---|
| open(path , mode) | path:文件路径,mode:r读,w写,rb读二进制文件,wb写二进制文件 |
文件描述符
with 语句
| 访问模式 | 说明 |
|---|---|
| r | 以只读⽅式打开⽂件。⽂件的指针将会放在⽂件的开头。这是默认模式。 |
| w | 打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。 |
| a | 打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。 |
| rb | 以⼆进制格式打开⼀个⽂件⽤于只读。⽂件指针将会放在⽂件的开头。这是默认模式。 |
| wb | 以⼆进制格式打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。 |
| ab | 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。 |
| r+ | 打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。 |
| w+ | 打开⼀个⽂件⽤于读写。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。 |
| a+ | 打开⼀个⽂件⽤于读写。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。⽂件打开时会是追加模式。如果该⽂件不存在,创建新⽂件⽤于读写。 |
| rb+ | 以⼆进制格式打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。 |
| wb+ | 以⼆进制格式打开⼀个⽂件⽤于读写。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。 |
| ab+ | 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。如果该⽂件不存在,创建新⽂件⽤于读写。 |
StringIO
图片,视频
codecs模块
- open()
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
| 属性 | 描述 |
|---|---|
| file.closed | 返回true如果文件已被关闭,否则返回false |
| file.mode | 返回被打开文件的访问模式 |
| file.name | 返回文件的名称 |
| file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true |
| 方法声明 | 功能描述 |
|---|---|
| read(num) | 读num个字节数据 |
| readline() | 读一行数据 |
| readlines() | 按照⾏的⽅式把整个⽂件中的内容进⾏⼀次性读取, 并且返回的是⼀个列表,其中每⼀⾏的数据为⼀个元素 |
| write() | 写数据 |
| tell() | 获取当前读写的位置 |
| seek(offset, from) | 定位到某个位置 |
| close() | 关闭文件 |
rfind() 提取⽂件的后缀
文件描述符:文件对象
os.name
uname()
| 方法声明 | 功能描述 |
|---|---|
| rename() | 重命名 |
| remove() | 删除文件 |
| os.environ | |
| os.getenv() | 获取系统的环境变量 |
| listdir() | 获取⽬录列表 |
| mkdir() | 创建文件夹 |
| chdir() | 改变当前目录 |
| getcwd() | 显示当前目录 |
| rmdir() | 删除文件夹 |
| 方法声明 | 功能描述 |
|---|---|
| abspath() | 查看当前目录的绝对路径 |
| join() | 合并路径 |
| split() | 拆分路径 |
| splitext() | 拆分路径,得到文件扩展名 |
| isdir() | 是否是目录 |
| isfile() | 是否是文件 |
os.environ
os.getenv()
- copyfile() 复制文件
pickling unpickling
- dumps()
- dump()
- loads()
- load()
json模块
- dumps()
- dump()
- loads()
- load()
try...except...finally...
raise抛异常
BaseException
ZeroDivisionError
StandardError
ValueError
AttributeError
StopIteration
TypeError
IOError
ImportError
- exception(e)
- info()
- basicConfig()
- 日志级别:debug , info , warning , error
单步调试,断点调试
pdb.set_trace()
assert
AssertionError
unittest
- setUp()
- tearDown
doctest,可以直接提取注释中的代码并执行测试。
os模块
- getpid() 获取父进程id
- fork()
managers
BaseManager
Process
- start()
- join()
- terminate()
Pool 进程池
- apply_async()
- close()
- join()
time
- time()
- sleep()
random
- random()
- randint()
Queue
- put()
- get()
- Queue()
Pipes
thread模块
threading模块
- current_thread()
- name
- start()
- join()
- Lock()
- local()
主线程 MainThread
- acquire()
- release()
Global Interpreter Lock
multiprocessing.managers
BaseManager
- register()
- start()
- shutdown()
- get_task_queue()
- get_result_queue()
- connect()
一个dict,threading.local()
- \d
- \w
- *,+,?,{n},{n,m}
- match()
- split()
- group()
- groups()
- compile()
logging
TCPServer,UDPServer
simplejson json
MethodType
types
slice
os
pdb
search
StringIO/cStringIO
- StringType
- UnicodeType
- ListType
- TypeType
- sys.path
- sys.path.append()
@functools.wraps(func)
functools.partial()
- cos()
- sin()
- namedtuple 定义一种数据类型
- Iterable
- deque 双向列表
- append()
- appendleft()
- defaultdict
- OrderedDict
- Counter
base64
- b64encode()
- urlsafe_b64encode()
struct模块
- pack()
- unpack()
hashlib模块
哈希算法、散列算法
- f()
- md5()
- sha1()
- update()
- hexdigest()
itertools模块
- count()
- cycle()
- chain()
- groupby()
- imap()
- ifilter()
dom
sax
- start_element
- end_element
- char_data
HTMLParser
- feed()
| 第三方模块 | 功能描述 |
|---|---|
| MySQL-python | MySQL的驱动 |
| numpy | 用于科学计算的NumPy库 |
| Jinja2 | 用于生成文本的模板工具 |
| PIL:Python Imaging Library | 图片处理 |
re
| 方法声明 | 功能描述 |
|---|---|
| findall() | |
| match() | |
random
| 方法声明 | 功能描述 |
|---|---|
| sample | |
string
| 方法声明 | 功能描述 |
|---|---|
| letters | |
| digits | |
- Counter
- collections
- socket
beautifulsoup
Pythongoose
requests
Image
| 方法声明 | 功能描述 |
|---|---|
| open() | |
| save() | |
| thumbnail() | 缩略图 |
| format | 格式:png,jpg等 |
| filter() | |
| size | 尺寸 |
| mode | |
| new() | |
ImageDraw
| 方法声明 | 功能描述 |
|---|---|
| Draw() | |
| text() | |
| point() | 填充每个像素 |
ImageFont
| 方法声明 | 功能描述 |
|---|---|
| truetype() | 创建Font对象 |
ImageFilter
| 方法声明 | 功能描述 |
|---|---|
| BLUR | |
数据库ORM框架
- Tkinter
- Frame:mainloop()
- Widget
- pack()
- grid()
- Button
- Label
- 输入框
Socket,封装了IP和端口,IP包,数据包
socket(socket.AF_INET, socket.SOCK_STREAM)
| 方法声明 | 功能描述 |
|---|---|
| connect(ip , port) | 链接服务器 |
| send() | 发送数据 |
| recv() | 接收数据 |
| recvfrom() | 直接接收来自任何客户端的数据 |
| sendto() | 把数据用UDP发给客户端 |
| close() | |
| bind() | 绑定端口 |
| listen() | 监听端口 |
| accept() | 接受客户端的链接 |
socket(socket.AF_INET, socket.SOCK_DGRAM)
发件人 → MUA → MTA → MTA → 若干个MTA → MDA ← MUA ← 收件人
MUA:Mail User Agent——邮件用户代理,Outlook,Foxmail
MTA:Mail Transfer Agent——邮件传输代理,就是那些Email服务提供商,比如网易、新浪、Gmail
MDA:Mail Delivery Agent——邮件投递代理,电子邮箱
SMTP:Simple Mail Transfer Protocol
| 方法声明 | 功能描述 |
|---|---|
| SMTP() | 构造方法 |
| set_debuglevel() | 设置Debug级别 |
| login() | 登录 |
| sendmail() | 发送邮件 |
| quit() | 退出 |
| starttls() | 加密传输 |
Message 邮件对象
+- MIMEBase
+- MIMEMultipart 把多个对象组合起来
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText 文本邮件对象
+- MIMEImage 作为附件的图片
Message
| 方法声明 | 功能描述 |
|---|---|
| get_payload() | 获取MIMEMultipart所有的子对象 |
| get_content_type() | 获取内容类型 |
| get_charset() | 获取编码 |
| get() | |
| is_multipart() | 是否是MIMEMultipart对象 |
MIMEBase
| 方法声明 | 功能描述 |
|---|---|
| add_header() | 添加头信息 |
| set_payload() | 把附件的内容读进来 |
MIMEText
| 方法声明 | 功能描述 |
|---|---|
| MIMEText(正文,mimetype,charset) | 构造方法 |
| as_string() | |
MIMEMultipart
| 方法声明 | 功能描述 |
|---|---|
| attach() | |
| alternative | 兼容古老设备 |
encoders
- encode_base64()
decode_header()
Header 邮件头
- From
- To
- Subject
from email.utils import formataddr
mimetype
- text/plain
- text/html
- image/png
POP3:Post Office Protocol
IMAP:Internet Message Access Protocol
| 方法声明 | 功能描述 |
|---|---|
| poplib.POP3() | 构造方法 |
| getwelcome() | 获取POP3服务器的欢迎文字 |
| user() | 验证用户名 |
| pass_() | 验证密码 |
| stat() | 获取邮件数量和占用空间 |
| list() | 获取所有邮件的编号 |
| len() | 获取邮件索引 |
| retr() | 获取邮件内容 |
| dele | 删除邮件 |
| quit | 关闭链接 |
| 方法声明 | 功能描述 |
|---|---|
| parsestr() | 把邮件内容解析为 Message 对象 |
parseaddr
- 网状数据库
- 层次数据库
- 关系数据库
- NoSQL
- MySQL
- SQLite
- SQLAlchemy
嵌入式数据库
| 方法声明 | 功能描述 |
|---|---|
| connect() | 连接数据库 |
| 方法声明 | 功能描述 |
|---|---|
| cursor() | 获取游标 |
| commit() | 提交事务 |
| close() | 关闭连接 |
| 方法声明 | 功能描述 |
|---|---|
| execute() | 执行SQL语句 |
| insert() | |
| update() | |
| delete() | |
| fetchall() | 获取查询结果集 |
| close() | |
| rowcount | 影响的记录行数 |
mysql.connector 驱动
| 方法声明 | 功能描述 |
|---|---|
| connect() | 连接数据库 |
ORM:Object-Relational Mapping
数据会话类
# 创建DBSession类型
DBSession = sessionmaker(bind=engine)
# 创建session对象
session = DBSession()
| 方法声明 | 功能描述 |
|---|---|
| add() | |
| commit() | 提交 |
| query() | 查询 |
| filter() | 过滤 |
| one() | 返回唯一行 |
| close() | 关闭会话 |
Base = declarative_base()
初始化数据库连接
gevent,在程序内部可中断
C/S架构
B/S架构
HTML + CSS + JavaScript
MVC Model-View-Controller
MVVM
HTTP
Web Server Gateway Interface
wsgiref模块
jinja2
- Django:全能型Web框架
- web.py:一个小巧的Web框架
- Bottle:和Flask类似的Web框架
- Tornado:Facebook的开源异步Web框架






