Python新手必读(中国开源项目)Python新手必读(中国开源项目)第一章开始为什么要选择python?一个高层的总结把python描述成一种面向对象的脚本语言可能是最合适的。它的设计混合了传统语言的软件工程的特点和脚本语言的易用性。它的主要特性有如下几个:1、它是面向对象的。它的类模式支持了诸如多态,操作符重载,多重继承等高级特性。2、它是自由的。它是开源的,像Tcl和Perl一样。3、它是可移植的。它是用ANSIC写成的。可以在今天所用的各种平台上编译、运行。4、它是功能强大的。python丰富的工具集使它位于传统脚本语言(如Tclandperl)和系统语言(如C,C++,JAVA)之间。5、它是可混合的。python程序可十分轻易地与其它语言写成的组件“粘合”在一起。如python/c集成api,JPython。6、它是易于使用的。开发周期短,程序大小是其它语言的几分之一。7、它是简单易学的。实践中的python1、系统软件,python对操作系统的内置接口,使它成为书写可移植程序,可维护的系统管理工具的理想工具。2、图形用户接口。它有一个叫Tkinter的TKAPI的标准的面向对象接口。3、组件集成。它可被c/c++扩展和嵌入其它系统的能力。4、快速原型。5、Internet脚本。6、数字编程。NumPy数字扩展程序模块包含诸多数字编程工具。7、数据库编程。提供了与sybase,oracle,odbc等数据库接口。8、其它的图像处理,人工智能,分布式对象等。python与类似工具的比较1、比Tcl强大,可用于大型系统的开发。2、比Perl有更清晰的语法,更简单的设计,使它更可读,更容易理解。3、不要与java比较,python只是一个脚本语言,而javaandc/c++是系统语言。如何运行python程序?1、交互式。交互命令行,在系统下打入python,就进行交互命令模式,提示符是,按Ctrl+D退出。%pythonprinthello,myfriend!;hello,myfriend!2、运行模块文件。模块文件是包含python语句的简单文本文件。你可以用pythonxxx来运行。用文本编辑器编写example.py的内容如下:importsysprintsys.argv接着就可以用以下命令运行。%pythonexample.py3、运行unix类型的脚本。就像shell脚本一样。#!/usr/local/bin/pythonprinttest............注释以#开头。存盘后,把它的属性改成可执行,就可以像shell脚本一样执行了。4、嵌入的代码和对象。在c程序中可调用python的运行时API。#includepython.h...py_Initialize();PyRun_SimpleString(x=brave+sir+robin);初览模块文件以.py为结尾的模块文件能导入或重载。例子:myfile.py模块内容为title=theexampletest现在这个模块可能被其它程序导入,而且能访问title变量。方法一:importmyfileprintmyfile.title方法二:frommyfileimporttitleprinttitle初览名称空间检测另一个技巧是用内置函数dir()跟踪程序交互运行时的名字。python设置细节重要的环境变量path系统shell查找路径,用来发现python。PYTHONPATHPython模块查找路径,用于导入。PYTHONSTARTUPPython交互式启动文件路径。TCL_LIBRARY,TK_LIBRARYGUI扩展变量(Tkinter)第二章类型与操作符Python程序结构它可分为模块,语句和对象三部份,关系如下:1、程序是由模块组成。2、模块中包含语句。3、语句生成并处理对象。为什么要使用内置类型?1、内置对象使简单程序写起来更容量。2、python提供对象并支持扩展程序。3、内置对象是扩展程序的组件。4、内置对象总比定制的数据结构类型更加有效。内置对象预览Number(数字)3.4,333,5+4jString(字符串)'sleep','hello'List(列表)[1,3[4,'this'],33]Dictionary(字典){'aaa':'test','bbb':'yyy'}Tuple(元组)(1,'aa',4,'cc')File(文件)text=open('a','r').read()数字python支持常见的数字类型,(整数,浮点数),常量和表达式。另外还提供更高级的数字类型支持。包括复数,无限精确整数,大量的数字工具库。正常整数(c的长整型)1234,-11,0长整数(无限大小)88888888L浮点数(c的双整型)2.33,3.14e-10,4E21i复数常量3+4j,2.0+4.0j,3J表达式操作符xory逻辑或lambdaargs:expression匿名函数xandy逻辑与notx逻辑反,=,,=,==,,!=比较操作符is,isnot身份测试in,notin序列成员关系测试x|y位或x^y位异或x&y位与xy,xy把x向左或向右移动y位x+y,x-y相加/合并,相减x*y,x/y,x%y乘/重复,除,余数/格式-x,+x,~x一元取反,一致,位取补x[i],x[i:j],x.y,x(...)索引,分片,限定,函数调用(...),[...],{...},`...`元组,列表,字典,转化为字符串混合操作符,表中越往下的结合性越强可用括号将表达式分组在混合类型的表达式上,python先将操作对像转化为最复杂的操作类型,然后再运行同种类型的数字运算,如一个整数与一个浮点数相加,python就会把整数转化为浮点数,再把两个浮点数相加。python的数字类型复杂程序如下:整数长整数浮点数复数。数字在实际中的应用位操作x=1#0001x2#左移两位01004x|2#位或:00113x&1#位与:0001注意:x的值一直都是1,没有变化。python提供了内置函数和内置模块用于数字处理。importmathmath.pi3.14159265359pow(2,4)#内置函数,不用导入。字符串s1=''空字符串s2=spam's双引号,单引号无需加反斜杠转义。block=...三引号块,字符串可跨过多行。s1+s2合并s2*3重复s2[i]索引s2[i:j]分片len(s2)长度a%sparrot%'dead'字符串格式forxins2迭代'm'ins2成员关系python不允许你在+and*号表达式中混合数字和字符,如'abc'+9会出错。索引和分片因为字符串的定义是有序的字符集合,所以可以通过位置访问它们的内容。在python,通过索引取得字符的位移。如同C一样,偏移以0开始,以比字符长度小1的值结尾。python还可以通过负偏移从序列中取值。s='spam'prints[0],s[1],s[2],s[3]#索引spamprints[1:3],s[1:],s[:-1]#分片papamspa修改和格式化在python中改变文本信息,只需用合并,分片这样的工具建立并赋值成一个新值即可。s=s+'!'spam!s=s[:4]+'test'spamtest'thisis%d%sword'%(1,'good')格式化字符串输出,类似于C的sprintf。重载了%操作符,原来的%操作符是取余。thisis1goodword字符串格式代码%s字符串%c字符%d十进制(整数)%i整数%u无符号整数%o八进制整数%x十六进制整数%X十六进制整数大写%e浮点数格式1%E浮点数格式2%f浮点数格式3%g浮点数格式4%G浮点数格式5%%文字%'%e%E%f%g%G'%(1.1,2.2,3.3,4.4,5.5)'1.100000e+0002.200000E+0003.3000004.45.5'普通的字符串工具python提供string这个处理字符串的工具模块。它包括转换大小写,查找子串,将字符转化成数字等功能。importstrings='test'string.upper(s)'TEST'string.find(a,'s')#返回索引的子串-1string.atoi(1234)+1234#把字符转化为整数进行加减运算2468'aa'+`99`#用``把整数转化为字符进行组合。'aa99'字符串常量变量a=aa'bprintaaa'ba='aab'printaaaba='aa\'b'printaaa'ba=testtesttestprintatesttesttest字符串的反斜线字符\newline忽略(继续)\\反斜杠\'单引号\双引号\a响铃\b退格\e退出\000空\n新行(换行符)\v垂直制表符\t水平制表符\r回车\f进纸符\0XX八进制值XX\xXX十六进制值XX\other任何其它的字符列表列表可包含任何种类的对象:数字、字符串甚至其它列表。在python中的列表的主要属性有:1、任意对象的有序集合。2、通过偏移存取。和字符串一样,可分片,合并等操作。3、可变长度,异构,任意嵌套。4、属于序列可变的类别。可在原位上改变,支持删除,索引赋值和方法等。5、对象引用的数组。类似于C的指针的数组。列表是C的数组,引有就像C的指针(地址)。常用列表常量和操作L1=[]一个空的列表L2=[0,1,2,3]四项:索引为0到3L3=['a',['b','c']]嵌套的子列表L2[i],L3[i,j]索引L2[i:j]分片len(L2)计算列表长度L1+L2合并L2*3重复forxinL2迭代3inL2成员关系L2.append(4)方法:增长L2.sort()排序L2.index(1)查找L2.reverse()反转......delL2[k]缩小L2[i:j]=[]同上L2[i]=1索引赋值L2[i:j]=[1,2,3]分片赋值range(4),xrange(0,4)生成整数的列表/元组例子:len([1,2,3])3[1,2,3]+[4,5,6][1,2,3,4,5,6][1,2]*4[1,2,1,2,1,2,1,2]forxin[1,2,3]:printx123索引和分片L=['aa','bb','cc']printL[2]#索引ccprintL[1:2]#分片['bb']原位改变列表L=['aa','aa','cc']L[1]='bb'#索引赋值printL['aa','bb','cc']L=['aa','bb','cc']L[2:3]=['CC']#分片赋值,删除+插入printL['aa','bb','CC']L.append('please')#append方法调用,其它方法类似。printL['aa','bb','CC','please']注意:append和sort在原位改变了关联的列表对象,但是不返回列表,它们返回一个叫None的值。对象本身同时改变,所以无需重新赋值。字典字典是无序的集合,和列表相对,因为列表是有序的集合。字典中的项是通过键来存取的,而不是通过偏移。(perl中的散列?)字典的主要属性如下:1、通过键而不是偏移量来存取。2、无序的任意对象集合。3、可变长度、异构、任意嵌套。4、属于可变映射类型。对象将键映射到值。5、对象引用表(散列表)。本质上说字典是作为散列表实现的。常见的字典对象常量和操作d1={}空的字典d2={'aa':2,'bb':4}两项的字典d3={'aa':{'bb':1,'cc':2}}嵌套d2['aa'],d3['aa']['cc']通过键索引d2.has_key('aa')方法:成