python核心编程第二版笔记.docx
《python核心编程第二版笔记.docx》由会员分享,可在线阅读,更多相关《python核心编程第二版笔记.docx(61页珍藏版)》请在冰豆网上搜索。
python核心编程第二版笔记
python核心编程--笔记(很详细,建议收藏)
解释器options:
1.1–d提供调试输出
1.2–O生成优化的字节码(生成.pyo文件)
1.3–S不导入site模块以在启动时查找python路径
1.4–v冗余输出(导入语句详细追踪)
1.5–mmod将一个模块以脚本形式运行
1.6–Qopt除法选项(参阅文档)
1.7–ccmd运行以命令行字符串心事提交的python脚本
1.8file以给定的文件运行python脚本
2_在解释器中表示最后一个表达式的值.
3print支持类c的printf格式化输出:
print“%sisnumber%d!
”%(“python”,1)
4print的输入内容后面加逗号,就会使其输入不换行
5把输出重定向到日志文件:
logfile=open(“c:
/1.log”,“a”);//打开文件c:
/1.log使用a模式..即add,添加.
print>>logfile,“Fatalerror:
invalidinput!
”;>>为重定向..将print的结果重定向到logfile,输出内容是”Fatalerror:
invalidinput!
”…
logfile.close();//关闭文件流…
6程序输入:
raw_input(“提示字符串”):
user=raw_input(“请输入您的姓名”);
7int(数值)…..将数值字符串转换成整数值…
8运算符:
8.1+-*/%是和其他语言相同的加减乘及取模运算.取余运算
8.2/在浮点取模中得到的结果是完整的浮点数
8.3//在浮点取模中得到的结果是经过舍去运算的结果.
8.4**是乘方
8.5>>和<<的移位运算也支持.但不支持java中的>>>和<<<移位.
8.6<<=>>=++!
=<>等比较运算符
8.7andornot等逻辑运算符
9变量和赋值:
python是弱类型语言..
10list,tuple,map*4得到的结果是一个新的list|tuple|map,是原数据的4份
11数字:
11.1int(有符号整数)
11.2long(长整数)
11.3bool(布尔值)
11.4float(浮点值)
11.5complex(复数)
11.6python2.3开始,如果结果从int溢出,会自动转型为long
11.7python2.4开始支持decimal数字类型,需要导入decimal模块..由于在二进制表示中会有一个无限循环片段,普通的浮点1.1实际是不能被精确表示的,被表示为1.1000000000000001.使用printdecimal.Decimal(‘1.1’);则可以得到精确的1.1
12字符串:
引号之间的字符集合,支持使用成对的单引号和双引号,三引号(三个连续单引号或双引号)可以用来包含特殊字符.使用索引运算符[]和切片运算符[:
]可以得到子字符串…字符串中第一个字符的索引是0,最后一个字符的索引是-1;
13列表和元组:
可以看作是普通的数组,能保存任意数量任意类型的python对象…
13.1列表元素用中括号包裹,元素的个数及元素的值可以改变.
13.2元组元素用小括号包裹,不可以更改,尽管他们的内容可以,元组可以看成是只读的列表.可以使用切片运算得到子集.
14字典:
相当于其他语言中的map,使用{key:
value}的方式表示.取值的方式和其他语言的map一致.也可以直接使用map[key]=value的方式为其赋值.
15条件语句:
ifexpression:
path1
elifexpression2:
path2
else:
path3
16while循环
whileexpression:
processbusiness
17for循环
foriteminlist|tuple|map:
printitem
17.1range(len(list))得到一个list长度范围内的整数list,方便遍历过程中获取索引值.
17.2python2.3中增加了enumerate(),可以通过它遍历list,同时得到索引和值
forindex,datainenumerate(list):
printindex,“:
”,data,
17.3列表解析:
[expressionfortarget1initerable1[ifcondition1]
fortarget1initerable2[ifcondition2]
fortarget1initerable3[ifcondition3]
fortarget1initerable4[ifcondition4]
.............................................
fortargetNiniterableN[ifconditionN]]
1、列表解析的语法是借鉴函数式编程语言Haskell。
2、列表解析的语法形式:
表达式+for循环+in+可迭代的对象
[表达式foriteminiterable]
实例:
[x*2forxinxrange(10)]
>>>[x*2forxinxrange(10)]
[0,2,4,6,8,10,12,14,16,18]
3、列表解析的拓展形式:
结合if语言
[表达式foriteminiterableif条件表达式]
实例:
>>>[x*2forxinxrange(10)ifx%2!
=0]
[2,6,10,14,18]
sqdEvens=[x**2forxinrange(8)ifnotx%2],获取一个序列,该序列是0-8的数字中所有x%2为0(false)的x的平方
18文件和内建函数:
open(),file()
18.1handle=open(file_name,access_mode=“r”),只读方式打开文件,得到的句柄是handle..该方法如果没有提供access_mode,默认是r
19异常处理:
raise可以故意引发异常
try:
#process
exceptIOError,e:
#errorprocess
20函数:
如果函数中没有return语句,自动返回None对象
deffunction_name([arguments]):
“optionaldocumentstring”
function_suite
20.1python的函数调用中参数是引用传递
20.2可以在定义函数的时候,在参数列表中通过=设置参数的默认值.
21类:
21.1定义:
classclass_name:
static_variable_name=value
def__init__(self,[arguments]):
//operation
//selfinhereisthereferenceforthisclassinstance
defgeneral_method_name(self,[arguments]):
//operation
//selfistheclassinstance
//ifyouwanttouseclassvariable,pleaseuselikeself.__class__.__name__
21.2实例化:
instance=class_name([arguments,…]);
22模块:
不带.py后缀名的文件名…一个模块创建之后,可以使用import导入这个模块使用.
22.1访问模块内的函数或变量:
module_name.function()|module_name.variable|module_name.class_name
22.2sys模块概览
22.2.1sys.stdout.write(‘HelloWorld!
\n’)//使用sys模块的标准输出
22.2.2sys.platform//返回系统的标记
22.2.3sys.version//返回系统的版本
23PEP:
一个PEP就是一个python增强提案(pythonenhancementproposal),是在新版python中增加新特性的方式…索引网址是:
http:
//python.org/dev/peps
24一些常用函数
24.1dir([obj])显示对象的属性,如果没有提供参数,显示全局变量的名字
24.2help([obj])显示对象的文档,如果没有参数,进入交互式帮助
24.3int(obj)将一个对象转换为整数
24.4len(obj)返回对象的长度
24.5open(file_name,mode)以mode(r|w|a…)方式打开一个文件
24.6range([[start,]stop[,step]])返回一个整数列表…结束值是stop-1,step默认是1
24.7raw_input(str)提示str等待用户输入
24.8str(obj)将一个对象转换为字符串
24.9type(obj)返回对象的类型…返回值本身是一个type对象
24.10sum(iterable[,start=0])可以对纯数值的list|tuple|map进行求和操作..
24.11dir([object])如果没有参数获得当前脚本scope内定义的对象,如果有参数,返回该对象内部定义的对象,如果该对象有一个__dir__方法,该方法将被调用,并且必须返回属性的列表…这就允许通过自定义__getattr__()或__getattribute__()方法的方式实现dir的自定义显示属性列表….如果没有指定参数,是根据该对象的__dict__内存字典的最佳聚合信息显示的..
24.12type([object])参数为空显示,参数不为空显示该对象的类型
24.13type(name,bases,dict)通过名称,基类,内存字典动态创建一个类型
24.14object__name.__doc__查看该对象的文档字符串
24.15__doc__对象的文档字符串,该文档字符串在定义对象时写在对象语句块中第一句,使用单纯的字符串的方式表示
24.16sys.exit()退出python解释器
24.17append(Object)给list添加一个元素
24.18os.linesep返回的是系统换行符…不同的系统换行符是不同的,使用linesep可以提高代码跨平台性
24.19string_variable_name.strip([chars])脱离,滤去字符串中的某些字符,如果没有参数返回原字符串
25数值按进制分为:
25.1二进制:
0b10101025.2八进制:
0716725.3十进制:
9876725.4十六进制:
0xf2134
Python基础(chapter3)
1setenceandsyntax语句和语法
1.1#为注释符号
1.2\n是标准行分隔符,通常一个语句一行
1.3反斜线\表示下一行继续,用来将单条语句放入多行…尽量使用括号代替
1.4分号;表示将两个语句连接在一行中…不提倡
1.5冒号:
表示将代码块的头和体分开
1.6语句(代码块)用缩进块方式体现:
同一个代码组的代码必须严格左对齐..由于不同的editor制表符宽度不一,为了使代码跨平台,推荐使用4个空格缩进
1.7不同缩进深度分隔不同的代码块
1.8python文件以模块的形式组织:
模块以磁盘文件的形式存在,不应该让某个模块充斥的太大
2赋值
2.1赋值语句没有返回值,但可以使用链式赋值
2.2python2.0开始支持增量赋值(算符和等号连接赋值),但是python不支持++,--
2.3赋值操作中,可变对象会被直接修改(引用位置值的修改),不可变对象则被重新赋予新的对象(引用修改)
2.4多元赋值:
a,b,c=1,2,‘string’,建议使用tuple的方式进行多元赋值:
(a,b,c)=(1,2,‘string’)
3swap操作:
x,y=y,x
4标识符
4.1大小写敏感
4.2python的关键字列表和iskeyword()函数在keyword模块,方便查阅
4.3内建:
built-in可以看作是系统保留字….对于一些内建函数需要覆盖(重定义,替换)…built-in是__builtins__模块的成员,该模块由解释器自动导入
4.4python不支持重载
4.5下划线:
作为变量前缀和后缀指定特殊变量
4.5.1_xxx:
不用’frommoduleimport*’导入
4.5.2__xxx__:
系统定义名字
4.5.3_xxx:
类中的私有变量名
5python之禅
TheZenofPython,byTimPeters
python之禅.作者TimPeters
Beautifulisbetterthanugly.
漂亮胜于丑陋
Explicitisbetterthanimplicit.
详尽胜于含蓄
Simpleisbetterthancomplex.
简单胜于复杂
Complexisbetterthancomplicated.
组合胜于复杂(结构)
Flatisbetterthannested.
单一胜于嵌套
Sparseisbetterthandense.
稀少胜于繁杂
Readabilitycounts.
可读性价值
Specialcasesaren'tspecialenoughtobreaktherules.
特例不足以违反规则
Althoughpracticalitybeatspurity.
实践胜于理论
Errorsshouldneverpasssilently.
错误可能从不沉默
Unlessexplicitlysilenced.
除非明白沉默
Inthefaceofambiguity,refusethetemptationtoguess.
面对歧义,不被猜想诱惑
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
可能仅有一种更好的方法
Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.
Nowisbetterthannever.
现在胜于一切
Althoughneverisoftenbetterthan*right*now.
Iftheimplementationishardtoexplain,it'sabadidea.
难于解释的实现是不好的
Iftheimplementationiseasytoexplain,itmaybeagoodidea.
易于明白的实现可能是个好方案
Namespacesareonehonkinggreatidea--let'sdomoreofthose!
名空间是一个好方案,让我们去超越这些
6模块组织
#起始行
#模块文档
#模块导入
#变量定义
#类定义
#函数定义
#主程序
7__name__用于指示模块应该如何被加载,如果值是”__main__”说明是主模块,如果是模块名,说明是被导入的
8主模块测试代码
defmain():
#businessprocess
if(__name__==‘__main__’)
main()
9内存管理
9.1基本
9.1.1弱类型–动态类型
9.1.2programmer不关心内存管理
9.1.3变量并会被回收
9.1.4del语句能够直接释放资源
9.2变量未初始化不允许使用
9.3引用计数:
对于一个内存堆中的对象,有多少个指针引用它..引用计数就是多少,引用计数为0时,该对象可以被垃圾回收器回收
9.3.1增加
9.3.1.1对象创建
9.3.1.2别名创建(引用赋值)
9.3.1.3参数传递(引用传值)
9.3.1.4被容器引用
9.3.2减少
9.3.2.1引用生命周期结束
9.3.2.2对象别名被显示销毁dely
9.3.2.3对象别名被赋予其他引用
9.3.2.4窗口对象本身被销毁
9.3.3del
9.3.3.1从现在的名字空间中删除一个别名
9.3.3.2对象的引用计数减一
9.4垃圾回收:
有对象引用计数为0,对象被显示告知需要销毁,有内存消耗大户存在导致系统压力较大时,垃圾回收机制运行,清理需要回收的内存区域…垃圾回收机制还有一个循环垃圾回收器,确保释放循环引用对象(a引用b,b引用a,导致其引用计数永远不为0)
10将引入的其他模块中常用的变量重新赋予一个本地别名(ls=os.linesep)不仅可以避免冗长的变量名,又可以提高加载速度(因为现在是本地变量了)
11重要的其他模块
11.1debugger:
pdb允许设置断点,逐行调试,检查堆栈,还支持事后调试
11.2logger:
logging分紧急,错误,警告,信息,调试五级日志
11.3profilers:
性能测试器
11.3.1profile:
python编写,测试函数执行时间,每次脚本执行总时间.
11.3.2hotshot:
python2.2,c编写,解决了性能测试过载问题,但需要更多时间生成结果,python2.5修正了hotshot的时间计量bug
11.3.3cProfile:
python2.5,c编写,需要较长时间从日志文件载入分析结果,不支持子函数状态细节,某些结果不准
python对象(chapter4)
1python对象有三个特征:
身份和类型是只读的,如果对象支持不支持更新操作,那么值也就是只读的.
1.1身份:
唯一的身份标识,可以使用内建函数id()得到,可以看作是对象的内存地址…
1.2类型:
对象的类型决定该对象保存什么类型的值,可以进行什么操作,遵循什么规则.,可以使用内建函数type()查看python对象的类型.
1.3值:
对象表示的数据项
2对象属性:
主要有属性,值,相关联的可执行代码(method),一些python类型也有数据属性,含有数据属性的对象包括但不限于:
类,类实例,模块,复数,文件.
3基础数据类型:
数字,整形,布尔型,长整型,浮点型,复数型,字符串,列表,元组,字典.
4其他内建类型:
类型,None,文件,集合/固定集合,函数/方法,模块,类
4.1type(type
(1))可以看出类型对象本身也是对象,它的类型是type
4.2None的类型是NoneType,NoneType只有一个值,就是None,不支持任何运算也没有任何内建方法,布尔值总返回False
5每个对象天生都有布尔值,以下对象的布尔值是False
5.1None
5.2False(bool类型)
5.3所有值为0的数
5.4‘’空字符串
5.5[]|()|{}空列表,空元组,空字典
5.6用户创建的实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0,那么返回的布尔值也是False
6当要获取一个对象的布尔值的时候,首先会调用__nonzero__(必须返回布尔类型或者int类型.)方法,如果实现了该方法,就返回该方法返回的布尔值,如果没有实现该方法,继续调用__len__方法(该方法返回值必须是大于等于0的),如果实现了__len__方法,就根据其返回值返回布尔值.
7内部类型:
python内部机制
7.1代码:
编译过的python的源代码片段,是可执行对象.通过调用内建函数compile()可以得到代码对象.代码对象可以被exec命令或eval()内建函数来执行.代码是用户自定义函数的核心,运行期获得上下文..__code__是函数的一个属性,函数除了代码这个属性,还有函数名,文档字符串,默认参数,全局命名空间等必须的属性
7.2帧对象:
用于跟踪记录对象
7.3跟踪记录:
用于异常发生时,程序访问跟踪记录对象处理程序.
7.4切片:
7.4.1步进切片sequence[:
:
number]number为负数,倒序显示字符串,正数则正序显示字符串,数值代表显示字符的step值.
7.4.2多维切片sequence[start1:
end1,start2:
end2]
7.4.3省略切片sequence[…,start1:
end1]
7.4.4切片对象使用slice([start,]stop[,step])可以创建一个切片对象
7.5省略对象:
用于扩展切片语法,起记号作用..在切片语法中表示省略号,省略对象有一个唯一的名字Ellipsis,布尔值始终是True
7.6Xrange:
调用xrange()生成Xrange对象,类似内建函数range,用于节省内存使用或range无法完成的超大数据集场合
8标准类型运算符
8.1对象值比较
8.1.1数字根据大小比较
8.1.2字符串根据字符先后顺序比较
8.1.3list|tuple|dict顺序按照其中元素(dict按照键)比较
8.1.4链式比较相当于多个比较使用and连接
8.1.5自定义类型对象的比较是引用值比较,也就是id(object_name)的比较
8.2对象身份比较
8.2.1is/isnot用来比较两个别名是否引用同一个对象
8.2.2整数对象和字符串对象是不可变对象…
8.3布尔类型运算符:
and,or,not
9标准类型内建函数
9.1cmp(obj1,obj2)比较obj1和obj2,根据比较结果返回整数i,i<0àobj1