菜鸟的PythonPythonPythonPython笔记目录����一、热身����二、开始编程����三、类型与操作����四、数字����五、字符串����六、列表����七、字典和元组����八、文件����九、基本语句����十、if和while控制语句����十一、for循环控制语句����十二、函数����十三、函数高级话题����十四、列表推导式(Listcomprehension)����十五、模块�十六、异常处理一、热身为什么选择PythonPythonPythonPython软件质量:可读性、可复用性以及可维护性。生产力:代码量相对小。可移植性:可以跨越Windows和Linux。组建集成:Python可以和C或者C++等语言结合使用。PythonPythonPythonPython的能力范围Python能做什么呢?系统编程,GUI,网络编程以及数据库编程等等。PythonPythonPythonPython的运行方式Python程序在运行之前要先从源程序被编译成字节码,这样可以加快程序的运行速度。字节码由Python虚拟机执行(PVM)。除了标准的CPython之外,还有Java上的Python实现——Jython,以及使得Python可以和.NET互通的IronPython。除此之外,有专门的Python优化程序可以提高代码的效率,以及讲Python制作成二进制可执行文件的程序。安装PythonPythonPythonPython到下载最新的稳定版本Python。在Windows平台下,安装过程和普通的软件没有什么区别,一路下一步就可以了。安装成功之后,开始菜单里应该多出如下一项:Python是根据一个英国喜剧MontyPython命名的。二、开始编程命令行方式在Python项目下有一个IDLE程序,打开它之后会出现Python的命令行窗口,可以以交互的形式执行程序。例如输入:print'hellocainiao!'第一个程序就这么诞生了!如下如:分别输入如下命令,可以简单地熟悉一下命令行环境:2*2是42**10是10242***100是语法错误……不能随便空格:print100#在语句前面输入空格是语法错误!!注释格式:print100####注释是这个样子的。将程序存储在文件里.py.py.py.py文件将Python语句保存到后缀为.py的文件里即可。之后在cmd下执行path/to/file.py就可以运行程序了。重定向在cmd下执行:path/to/file.pysave.txt将会把file.py的输出存储在save文本文件里。解决双击执行PythonPythonPythonPython程序后cmdcmdcmdcmd窗口消失在Windows下,直接双击.py文件执行程序,通常会闪过一个黑窗口,无法观察到任何输出。可以在程序的最后添加一句:raw_input()可以避免窗口消失。LinuxLinuxLinuxLinux可执行脚本直接可以执行的脚本,关键是第一行的注释:#!/usr/local/bin/pythonprint'TheBrightSideofLife...'#Anothercommenthere直接从书里抄下来的代码,第一行是指向Python解释器的路径。模块(Python(Python(Python(Pythonmodule)module)module)module)引入模块引入一个模块的语法:importmodule#withoutsuffix注意,是不需要添加.py后缀的。重载模块执行上面代码之后再次importmodule将不会有任何事情发生。需要:reload(module)实例在top.py程序中调用另一个模块。test.py内容如下:test=testingtop.py内容如下:importtestprinttest.test失败,对比书上也没找到毛病,最后随便敲了一下test发现原来Python内部有这么个模块,名字冲突了……汗,把文件名改成myTest就没问题了。myTest.py内容如下:test=testingtop.py内容如下:importmyTestprintmyTest.test这里,test叫做myTest模块的属性。再次强调:import对同一个模块来说,一个进程值可以import一次。fromfromfromfromfrommyTestimporttest使用from调用模块的时候,再使用test的时候,可以不用点来访问了,直接test就好。dirdirdirdir无论使用import还是from,所有属性都会被引入。使用dir可以查看已经引入模块的所有属性。printdir(myTest)结果:['__builtins__','__doc__','__file__','__name__','__package__','test']其中有前后双下划线的东西是Python内置的,不用管。模块维护自己的命名空间execfileexecfileexecfileexecfileexecfile('module.py')另外一种运行文件的方式,可以在一个进程中多次运行文件,但是小心覆盖正在使用的变量。与其它语言的互通,书上把这个叫做EmbeddingCalls。书上举了一个C调用Python的简单示例:#includePython.h...Py_Initialize();PyRun_SimpleString(x=brave+sir+robin);三、类型与操作基本变量类型Number,数字:8。String,字符串:’test’List,列表:[1,2,4,5]Dictionaries,字典:{'food':'spam','taste':'yum'}Tuple,元组:(1,'spam',4,'U')File文件:myfile=open('eggs','r')其它类型:Sets,types,None,Booleans数字简介print3.14*2#mathimportmathprintmath.pi#randomimportrandomprintrandom.random()printrandom.random()printrandom.choice([1,2,3,4])printrandom.choice([1,2,3,4])字符串简介#Chinese#中文字符串strCN='春暖花开'#输出字符串printstrCN#len函数,字符串的长度printlenlenlenlen(strCN)#访问第一个字符printstrCN[1][1][1][1]#访问最后一个字符printstrCN[-1]#English#英文字符串strEN='springcomesandtheflowerisopen...'printstrENprintlen(strEN)printstrEN[0]printstrEN[-1]#从0到5但是不包括5。printstrEN[0:5][0:5][0:5][0:5]#from0to4printstrEN[0:-1]#简略写法:分别表示到字符串结尾,和从字符串开头。printstrEN[0:][0:][0:][0:]printstrEN[:-1][:-1][:-1][:-1]#字符串可以进行+链接和乘法运算printstrCN++++strENprintstrCN****2#Stringmethods#字符串方法,注意:所有的方法都不会改变字符串的值。#需要再赋值给另一个新建字符串来保存修改后的值。printstrEN.find('flower')printstrEN.replace('flower','~_~')printstrEN.split('')printstrEN.upper()printstrEN.isalpha()printstrEN.rstrip()#togethelp#取得帮助printdirdirdirdir(strEN)helphelphelphelp(str)#multiline#多行字符串printdivpHTMLCodegoeshere.../p/div#patternmatching#模式匹配importreresult=re.matchmatchmatchmatch('(\w+)',strEN)printresult.groupgroupgroupgroup(1)列表ListListListList简介#list#新建列表testList=[10086,'中国移动',[1,2,4,5]]#访问列表长度printlen(testList)#到列表结尾printtestList[1:]#向列表添加元素testList.append('i\'mnewhere!')printlen(testList)printtestList[-1]#弹出列表的最后一个元素printtestList.pop(1)printlen(testList)printtestList#listcomprehension#后面有介绍,暂时掠过matrix=[[1,2,3],[4,5,6],[7,8,9]]printmatrixprintmatrix[1]col2=[row[1]forrowinmatrix]#getacolumnfromamatrixprintcol2col2even=[row[1]forrowinmatrixifrow[1]%2==0]#filterodditemprintcol2even字典简介:#新建一个字典testDict={{{{'time':'时间','machine':'机器','timemachine':'时间机器'}}}}printtestDict['time']#doitinanotherway#另一种构造字典的方式newDict={}newDict['stuff']['stuff']['stuff']['stuff']='start'printnewDict#apersoninPythonfromthebook#字典的属性可以是字典rec={'name':{'first':{'first':{'first':{'first':'Bob','Bob','Bob','Bob','last':'last':'last':'last':'Smith'}'Smith'}'Smith'}'Smith'},'job':['dev','mgr'],'age':40.5}printrecrec=0#memoryfreedwhenthelastreferenceisgone#sortadictionary#字典排序D={'a':1,'b':2,'c':3}printDforiinsortedsortedsortedsorted(D):printiprintD[i]#optimazition:listcomprehensionrunsfaster#优化:listcomprehension比for循环要快一些squares=[x**2forxin[1,2,3,4,5]]printsquares#fasterthansquares=[]forxin[1,2,3,4,5]:squares.append(x**2)printsquares#testifakeyexistinadictionary#查看某个字典中是否存在某个key。ifnotD.has_key('f'):print'missing'元组TuplesTuplesTuplesTuples简介和list类似,但是具有不变性,像number和string一样:testTuple=(1,2,3,4)printlen(testTuple)不变性ImmutabilityImmutabilityImmutabilityImmutability:注意,以上的操作之后字符串本身是不变的,而且也不能像这样