开篇:
本文内容来源于《零基础学python》!
写博客主要是作为个人笔记,也方便有需要的人可以阅读。由于知识水平有限难以保证博文的准确性,仅供参考,欢迎指正。如果有类似经历或想法的可以联系我一起学习。
内建函数(built-in Function)
help() 查看每个函数的使用方法,按q键返回; dir(X) 查看X的函数
range(start, stop[, step]) 创建一个数字元素组成的列表,参数含义依次为开始数值(默认为0),结束数值,变化步长(默认为1,不可为0),参数必须为整数
raw_input() 从标准输入中读入一个字符串
dir(module) 可以通过它查看任何模块中所包含的工具
is() 判断是否为同一个
zip() 整合两序列的对应元素为元组形式 ;若序列长短不一,则短的为准;数据类型不一,可将输出数据类型变为字典;常用于简化循环
vars([object]) 实现返回对象object的属性和属性值的字典对象。如果默认不输入参数,就打印当前调用位置的属性和属性值,相当于locals()的功能。如果有参数输入,就只打印这个参数相应的属性和属性值。
enumerate 同时得到元素索引和元素
reversed() 反向迭代序列值
iter() 返回一个迭代器对象,参数需要是一个符合迭代协议的对象或者是一个序列对象;next()配合与之使用
hasattr() 判断一个字符串是否是可迭代的;getattr()
issubclass() 使我们可以查看一个类是不是继承了另一个类
callable() 测试对象的可调用性
type() 查看对象的类型;isinstance() 测试对象,以确定它是否是某个特定类型或定制类的实例
ord() 返回某个字符所对应的ASCII值(十进制) ; chr() 根据整数值得到相应字符
id() 查看每个对象的内存地址,即身份。
map(func,seq) func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并塞入到func那个函数里面,并将func的返回值依次存到一个list中。
divmod(a,b) 返回商和余数
round(a,b) 四舍五入
repr()代替反引号
字符串(str)的函数
关于字符串大小写: .title() 首字母大写 .upper() 全部大写 .lower() 全部小写 .isupper() 字母是否全是大写 .islower() 字母是否全是小写 .istitle() 字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
去除字符串前后空格:.strip() 去掉字符串的左右空格 .lstrip() 去掉字符串的左边空格 .rstrip() 去掉字符串的右边空格
拼接字符串:使用+号 ; " ".join() 通常用来拼接列表元素
由r开头引起的字符串,就是原始字符串,在里面放任何字符都表示该字符的原始含义,如r"c:\news"。
in 判断某个字符串是不是在另外一个字符串内
* 重复序列元素 如 "-"*10 = ----------
除了传统的输出格式化方法,python推荐使用新的方式string.format(),用索引号来占位,且代表对应format()内容的顺序。
列表(list)的函数
list.append(x) 向列表尾追加元素;list.extend(L) 向列表尾追加另一列表 区别:append是整建制地追加,extend是个体化扩编。list.insert(i,x) 在任何位置增加一个元素
list.remove(x) 移除列表中的第一个X值;list.pop([i]) 删除第i个元素并返回该值,不写i则默认是列表尾
list.reverse() 将列表元素的顺利反过来,不返回值;list.sort() 将列表元素进行排序
list解析 将for循环和创建新元素的代码并成一行
元组(Tuple)
元组是用圆括号括起来的,其中的元素之间用逗号隔开,元组中的元素不能更改和str类似,元组中的元素类型是任意的python数据和list类似。
用list()和tuple()能够实现列表和元组的转化
特点:Tuple 比 list 操作速度快;对不需要修改的数据起到“写保护”的作用;
字典(dictionary)
"name":"****",(键值对)前面的name叫做键(key),后面的****是前面的键所对应的值(value)。在一个dict中,键是唯一的,不能重复。值则是对应于键,值可以重复。键值之间用(:)英文的冒号,每一对键值之间用英文的逗号(,)隔开。在字典中的“键”,必须是不可变的数据类型;“值”可以是任意数据类型。
基本操作:
len(d),返回字典(d)中的键值对的数量
d[key],返回字典(d)中的键(key)的值;dict.get() 得到字典中某个键的值,如果不能找到该键,默认返回None,还可返回指定值; dict.setdefault(k[,d]) 前面执行get操作,如果找不到,则添加指定键值对。
d[key]=value,将值(value)赋给字典(d)中的键(key)
del d[key],删除字典(d)的键(key)项(将该键值对删除)
key in d,检查字典(d)中是否含有键为key的项
clear() 清空字典中所有元素
items/iteritems 以二元组的形式得到字典的列表; keys/iterkeys 得到字典的键 ; values/itervalues 得到字典的键值
D.pop(k[,d]) 删除指定键的键值对,返回键值,若找不到该键则返回d,否则报错;D.popitem() 随机删除一对键值对,并以一个元组的形式返回,字典为空则报错。
总结:对序列(列表、元组)、字典和文件都可以用iter()方法生成迭代对象,然后用next()方法访问
集合(set)
用{}花括号来定义;其中的元素没有序列,也就是是非序列类型的数据;而且,set中的元素不可重复,这就类似dict的键.
用list()和set()能够实现两种数据类型之间的转化
set.pop() 任意选一个元素删除并返回其值;set.remove(obj) 删除元素obj,若不存在则报错;set.discard(obj) 删除元素obj,若不存在则noting todo;set.clear() 清空
frozenset() 可哈希(hashable)类型的集合,即不能修改
A<B/A.issubset(B) 判断集合A是否是集合B的子集;A | B/A.union(B) 得到两者的并集;A & B/A.intersection(B) 得到两者交集;A - B/A.difference(B) 得到两者补集
语句
三元操作符 如 A = Y if X else Z 如果X为真,那么就执行A=Y 否则执行A=Z
文件操作
read 读取指定长度的内容,默认读取全文; readline 按行的形式读取指定长度内容;readlines 按行的形式读取指定长度内容,最后将各行组成列表形式输出;还可使用fileinput模块
seek() 以字节为单位移动指针;tell() 显示当前指针所在位置
with as
函数
参数收集:当传给函数的参数个数不确定时,可以使用*arg(将其它参数全部以元组的形式收集起来);**kargs(将字典形式的值收集起来)
类
类是对象的高度抽象;注意类和实例的区别,类可以理解为模具,实例则是按模具制造的产品
旧式类和新式类:两者对于多重继承的查找和调用方法不同,旧式类是深度优先,新式类是广度优先。
定义类的时候,self这个参数是必须的。作用:接收实例化过程中传入的所有数据、在类内部传递参数导入的数据
类被实例化后,实例名称(girl)和self是对应关系;注意区分类属性和实例属性;
继承的过程中如果子类重写了某行为(方法)则认为之前父类对应的行为被遮盖。这种情况下为了能够调用父类被遮盖的行为,Python推荐使用super函数,其参数:第一个是当前子类的类名字,第二个是self,然后是点号,点号后面是所要调用的父类的方法。如:super(Girl, self).__init__()
print C.__mro__是要打印出类的继承顺序(广度优先)
对于多态问题,类型检查是毁掉多态的利器,比如type、isinstance以及isubclass函数,所以,一定要慎用这些类型检查函数。
python中私有化的方法就是在准备私有化的属性(包括方法、数据)名字前面加双下划线;若要调用某属性可在定义前加上@property
__dict__,实例还是类,都用__dict__来存储属性和方法
__slots__能够限制属性的定义,不过它存在的终极目标是优化内存使用;已经通过类给属性赋值则对应的实例属性只读
__setattr__(self,name,value):如果要给name赋值,,同时它不存在的时候,就调用这个方法。
__getattr__(self,name):如果name被访问,同时它不存在的时候,此方法被调用。
__getattribute__(self,name):当name被访问时自动被调用(注意:这个仅能用于新式类),无论name是否存在,都要被调用。
__delattr__(self,name):如果要删除name,这个方法就被调用。
生成器(generator)
生成器解析式是有很多用途的,在不少地方替代列表,特别是针对大量值的时候
yield--作为一个关键词是生成器的标志;遇到yield语句,将值返回,并暂停执行(有的称之为挂起);
.send 在生成器挂起后给它提供新的值
throw(type, value=None, traceback=None):用于在生成器内部(生成器的当前挂起处,或未启动时在定义处)抛出一个异常(在yield表达式中)。
close():调用时不用参数,用于关闭生成器。
上下文管理器
概念:上下文管理器是支持上下文管理协议的对象,这种对象实现了__enter__()和__exit__()方法。
用法:with.......as...... 如
with open("23501.txt") as read_file, open("23503.txt", "w") as write_file:
for line in read_file.readlines():
write_file.write(line)
contextlib模块---其中比较常用的是contextmanger、closing和nested。
contextlib.closing()--比较常见的情况用在关闭数据库连接,如
with contextlib.closing(CreateDB()) as db:
db.query()
contextlib.nested(),如:
with contextlib.nested(open("23501.txt", "r"), open("23503.txt", "w")) as (read_file, write_file):
for line in read_file.readlines():
write_file.write(line)
contextlib.contextmanager----是一个装饰器,它作用于生成器函数(也就是带有yield的函数),一旦生成器函数被装饰以后,就返回一个上下文管理器,即contextlib.contextmanager因为装饰了一个生成器函数而产生了__enter__()和__exit__()方法。特别要提醒,被装饰的生成器函数只能产生一个值,否则就会抛出RuntimeError异常;如果有as子句,则所产生的值,会通过as子句赋给某个变量。
错误和异常
处理异常的方式之一,使用try...except... 如果没有异常发生,except子句在try语句执行之后被忽略;如果try子句中有异常可,该部分的其它语句被忽略,直接跳到except部分,执行其后面指定的异常类型及其子句。
可以用多个except,还可以在一个except后面放多个异常参数(一定要用圆括号包裹起来)
可以选择打印出内置的异常错误提示,在异常参数后面接", e"或者"as e"
如果还可能有更多的异常,可以写成 execpt:或者except Exception, e
else子句----如果执行了try,则except被忽略,但是else被执行
finally子句----不管前面执行的是try,还是except,它都要执行;用来在可能的异常后进行清理
raise----是作为单独一个语句,它的含义是将异常信息抛出。
assert----等价于布尔真的判定,发生异常就意味着表达式为假。
模块
向解释器增加自己写的模块:import sys ----> sys.path.append("****")
对于一个.py文件,在一般情况下,如果仅仅是用作模块引入,可以不写if __name__ == "__main__"或者module.__name__ == "module"。
__all__ 在模块中的作用是告诉引用本模块的解释器,哪些东西是有权限被访问的
撰写模块文档的方法,即在.py文件的最开始写相应的内容。这个要求应该成为开发习惯。
sys模块
sys.argv是变量,专门用来向python解释器传递参数,所以名曰“命令行参数”。
sys.exit()----退出当前的程序;参数为0则表示正常退出
sys.stdin, sys.stdout, sys.stderr 分别表示标准UNIX概念中的标准输入、标准输出和标准错误
OS模块
操作文件:重命名----- os.rename("原名.py", "新名.py")、删除文件------ os.remove("路径")
操作目录
os.listdir:显示目录中的文件;os.getcwd:当前工作目录;os.chdir:改变当前工作目录;os.makedirs / os.removedirs:创建 / 删除空目录;os.pardir:获得父级目录
os.mkdir():创建空目录(只能一层一层创建);os.stat()能够查看文件或者目录的属性;os.chmod();os.system()是在当前进程中执行命令,直到它执行结束
heapq模块
heappush(heap, x):将x压入对heap(这是一个列表,数据放到堆里面之后,会自动按照二叉树的结构进行存储);heappop(heap):删除最小元素;
heapify():将列表转换为堆;heapreplace() :是heappop()和heappush()的联合,也就是删除一个,同时加入一个
calendar模块
篇幅较大,暂时不列
time模块
time.time()获得的是当前时间(严格说是时间戳);time.localtime() 本地时间,得到时间元组;time.gmtime() 格林威治时间,得到时间元组;
time.ctime() 默认是以time.time()的时间戳为参数
time.asctime() 默认是以time.localtime()的值时间元组为参数;mktime() 是以时间元组为参数,返回了时间戳
strftime(...) strftime(format[, tuple]) 将时间元组按照指定格式要求转化为字符串。如果不指定时间元组,就默认为localtime()值
strptime(...) strptime(string, format) 将字符串转化为时间元组,要指定两个参数,一个是时间字符串,另一个是时间字符串所对应的格式
urllib模块
urlopen(url, data=None, proxies=None) 主要用于打开url文件,然后就获得指定url的数据;
url:远程数据的路径,常常是网址;data:如果使用post方式,这里就是所提交的数据;proxies:设置代理
info():返回头信息;getcode():返回http状态码;geturl():返回url
read(),readline(),readlines(),fileno(),close():都与文件操作一样,这里不再赘述
对url编码、解码
quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符
urllib.unquote(string) :对字符串进行解码
quote_plus(string [ , safe ] ) :与urllib.quote类似,但这个方法用'+'来替换空格' ',而quote用'%20'来代替空格
unquote_plus(string ) :对字符串进行解码;
urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如{'name': 'laoqi', 'age': 40}将被转换为"name=laoqi&age=40"
pathname2url(path):将本地路径转换成url路径
url2pathname(path):将url路径转换成本地路径
urllib.urlretrieve(url[, filename[, reporthook[, data]]]),参数含义如下:
url:文件所在的网址
filename:可选。将文件保存到本地的文件名,如果不指定,urllib会生成一个临时文件来保存
reporthook:可选。是回调函数,当链接服务器和相应数据传输完毕时触发本函数
data:可选。如果用post方式所发出的数据
urllib2模块----urllib模块和urllib2模块有的方法可以相互替代,有的不能,有时候两个要同时使用。
比较常用的比如urlopen()跟urllib.open()是完全类似的。
Request类----建立Request对象之后,它的最直接应用就是可以作为urlopen()方法的参数;如果是通过post向某地址提交数据,也可以建立Request对象。
该模块还有如下方法:
设置HTTP Proxy;设置Timeout值;自动redirect;处理cookie
xml.etree.ElementTree----python提供了多种模块用于处理XML,这里只介绍这一种
Element对象
常用属性:
tag:string,元素数据种类
text:string,元素的内容
attrib:dictionary,元素的属性字典
tail:string,元素的尾形
针对属性的操作
clear():清空元素的后代、属性、text和tail也设置为None
get(key, default=None):获取key对应的属性值,如该属性不存在则返回default值
items():根据属性字典返回一个列表,列表元素为(key, value)
keys():返回包含所有元素属性键的列表
set(key, value):设置新的属性键与值
针对后代的操作
append(subelement):添加直系子元素
extend(subelements):增加一串元素对象作为子元素
find(match):寻找第一个匹配子元素,匹配对象可以为tag或path
findall(match):寻找所有匹配子元素,匹配对象可以为tag或path
findtext(match):寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path
insert(index, element):在指定位置插入子元素
iter(tag=None):生成遍历当前元素所有后代或者给定tag的后代的迭代器
iterfind(match):根据tag或path查找所有的后代
itertext():遍历所有后代并返回text值
remove(subelement):删除子元素
ElementTree对象
find(match)
findall(match)
findtext(match, default=None)
getroot():获取根节点.
iter(tag=None)
iterfind(match)
parse(source, parser=None):装载xml对象,source可以为文件名或文件类型对象.
write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")
补充:
deque模块----“双端队列”----from collections import deque .append() #从右边增加;.appendleft() #从左边增加;.pop() #从右边删除;.popleft() #从左边删除
保存数据
将数据存入文件----将要存储的对象格式化(或者叫做序列化),才好存好取。
pickle模块----还有跟它完全一样的叫做cpickle,两者的区别就是后者更快。
pickle.dump(obj,file[,protocol])
obj:序列化对象,上面的例子中是一个列表,它是基本类型,也可以序列化自己定义的类型。
file:一般情况下是要写入的文件。更广泛地可以理解为为拥有write()方法的对象,并且能接受字符串为为参数,所以,它还可以是一个StringIO对象,或者其它自定义满足条件的对象。
protocol:可选项。默认为False(或者说0),是以ASCII格式保存对象;如果设置为1或者True,则以压缩的二进制格式保存对象。
shelve模块
数据库
三种类型的数据:
关系型数据库:MySQL、Microsoft Access、SQL Server、Oracle、...
非关系型数据库:MongoDB、BigTable(Google)、...
键值数据库:Apache Cassandra(Facebook)、LevelDB(Google) ...
Python2和Python3的区别总结
print() 在2.x中语句 在3.x中是函数 语句后没有任何符号则默认每次打印结束换行,如:在print语句的最后加了一个逗号,打印出来的就在一行了。
python2中/为取整,python3中/为除法(带小数),// 取整运算
python3.x,迭代器对象实现的是__next__()方法,不是next()。并且,在python3.x中有一个内建函数next(),可以实现next(it),访问迭代器,这相当于于python2.x中的it.next()(it是迭代对象)
python2默认的编码是ascii,通过encode可以将对象的编码转换为指定编码格式(称作“编码”),而decode是这个过程的逆过程(称作“解码”)。避免中文乱码经验
Python与其他语言差异较大之处总结
变量操作 对象有类型,变量无类型,变量可以理解为标签
“万物皆对象”
缩排规则:必须使用4个空格来表示每级缩排
list[ ] list中的元素是任意类型