Python Learning

开篇:
本文内容来源于《零基础学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中的元素是任意类型


猜你喜欢

转载自blog.csdn.net/qq_38156052/article/details/77994763
今日推荐