抽空整理了下Python的笔记,可能有点不全,不过过一遍大概就好….
Python笔记
版本
Python 2.7
控制流
while循环
|
|
判断条件为真则继续循环
for循环
|
|
可遍历序列结构的类型
|
|
if
|
|
if常见三段式
else的特别用法
当循环中存在break时,可以配合else使用
当循环的条件为假并且非break打破循环条件时,就会执行else语句
|
|
如上,当try块的语句执行完并且没有异常时,就会执行else中的语句
有用的杂项
range
生成等差数列的列表
用法:range(起点,不包含的终点,步长)
|
|
pass
代表什么都不做,忽略至少一条语句的要求
逻辑运算
python的逻辑运算使用”or”,”and”,”not”关键字,其中or和and都是短路操作
is,in
is,is not用于判断是否为相同对象。in,not in用于判断一个值是否存在于序列或集合中
切片
|
|
函数
普通函数
|
|
当函数给出默认值时可以不传对应的参
|
|
函数名还可以赋值给变量
匿名函数
|
|
常用于简单的函数
数据结构
List
用”[]”表示
常用方法:
方法 | 描述 |
---|---|
list.append(x) | 将x元素添加到list末尾 |
list.extend(L) | 将列表L加入到list末尾 |
list.insert(index,x) | 在list的index索引之前插入x |
list.remove(x) | 删除列表中第一个值为x的元素,如果没有这样的元素会报错 |
list.index(x) | 返回第一个元素为x的的索引,没有的话会报错 |
list.pop(index) | index参数可选,删除指定位置并且返回该元素,index不选默认删除最后一个 |
list.count(x) | 返回列表中x出现的次数 |
list.reverse() | 原地反转列表中的元素 |
list.sort(cmp=None,key=None,reverse=False) | 列表排序 |
filter(function,List) | eg. filter(lanmbda x:x%2==0,range(0,9)),迭代List每一项,根据function判断是否过滤 |
map(function,List) | List的每一项都调用function(item)并返回结果 |
reduce(function,List,value) | List的前两项放入function(x,y)中,返回结果后和下一个元素继续调用,value为初始值可选,以免列表为空时返回异常,一般初始值设置0 |
列表推导式:
del语句可以用于从列表中删除切片或者清除整个列表
Tuples(元组)
用”()”表示
可变类型与不可变类型:
是否可变 | 具体 |
---|---|
可变类型 | 列表,字典 |
不可变类型 | 元组,数字,字符串 |
元组 不能 改变(删除)组内元素值,元组可以拆分赋值。
元组常用操作:
方法 | 描述 |
---|---|
t.count(x) | 计算x在元组内出现的次数 |
t.index(‘a’,1,4) | 在索引1,3内寻找元素a,并返回其索引,后两个参数可选 |
len(t) | 计算t的长度 |
Set(集合)
用”{}”表示,不过打印的时候会变成”set([k,w,x])”
无顺序且不重复,常用于去重
常用操作:
方法 | 描述 |
---|---|
s.add(x) | 将x元素添加到集合中 |
s.remove(x) | 在集合中删除x元素 |
s.update([1,2,3]) | 用于更新多项 |
x in s | 判断x元素是否在集合内,反操作not in |
s.issubset(t) | 判断s是否是t的子集,反操作issuperset |
s.union(t) | 将s与t合并 |
s.intersection(t) | s与t的交集 |
s.difference(t) | s-t |
s.copy() | 返回s的浅克隆 |
集合推导式:
Dictionary(字典)
用{key1:value1,key2:value2}表示
实质为键值对,key为不可变类型,可以用于不包含对象的元组表示
常用操作:
遍历技巧
对于序列类型(List,String,Tuples,range)遍历方法:
对于集合:
对于字典:
模块化
在python中一个python文件可以看作是一个模块,而文件夹可以看作是一个包。
执行模块
|
|
此时该py文件可以作为执行脚本使用,其中argv[0]为脚本的名字,argv[1]为往后给脚本的传值
导入其他文件夹里的模块
第一种方法是在其他文件夹内创建”init.py”文件,使该文件夹成一个包
|
|
第二种方法可以利用sys.path
输入输出相关
输出方式
|
|
将其他类型转换为字符串
|
|
字符串格式化
|
|
标准输入
|
|
文件操作
|
|
json操作
|
|
异常
异常处理
|
|
被捕获的异常重新抛出
|
|
自定义异常
自定义的异常只需直接或间接继承Exception即可:
常见异常
异常名 | 描述 |
---|---|
AssertionError | assert(断言)语句失败 |
AttributeError | 试图访问一个对象没有的属性 |
IOError | 输入/输出异常,文件无法打开等 |
ImportError | 无法引入模块或者包,导入路径可能出现问题 |
IndentationError | 语法错误,缩进问题 |
IndexError | 下标越界 |
KeyError | 试图访问字典里不存在的键 |
KerboardInterrupt | 键盘中断 |
NameError | 使用一个还未被赋值予对象的变量 |
SyntaxError | Python代码非法 |
TypeError | 传入对象类型与要求的不符 |
UnboundLocalError | 全局变量与局部变量同名,并且局部变量还没赋值 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
针对UnboundLocalError,全局变量在内部的作用域是 只读的 ,若进行赋值操作的话,解析器会认为在局部创建了同名的局部变量
|
|
面向对象
类
|
|
若成员变量与成员方法同名时,会覆盖成员方法
继承
|
|
子类可以重写父类方法,只需同名覆盖即可
继承相关的方法
方法 | 描述 |
---|---|
isinstance(obj,class) | 检查obj是不是class的实例 |
issubclass(SonClass,FatherClass) | 判断是否是子类 |
多继承
|
|
对于调用父类成员,按照顺序先搜索F1,再搜索F2
私有变量
|
|
迭代器
若类实现了iter和next方法,则可以使用迭代器
生成器
带有yield的函数都是生成器.
yield与return一样,可以返回一个值,不过当返回了一个值后,会接着执行yield下一行的语句.
生成器也是可以迭代的,常用的就是循环里面使用yield,这样可以节省内存.
常用的标准库
模块名 | 描述 |
---|---|
os模块 | 可以与操作系统交互的模块,如执行系统命令 |
glob模块 | 通配符搜索指定路径的文件 glob.glob(pathname) |
sys模块 | 常用于与命令行执行脚本时,获取命令行参数,标准输入输出错误输出. sys.exit()/sys.stderr.write() |
re模块 | 正则表达式匹配字符串 |
math模块 | 提供数学运算 |
random模块 | 提供随机选择 |
urllib2,smtplib模块 | 访问网络和发送邮件 |
datetime模块 | 处理日期时间 |
zlib模块 | 数据压缩 |
threading模块 | 多线程相关 |
logging模块 | 日志系统 |
decimal模块 | 十进制浮点数,用于财务等精度需求 |