1、python基础知识1.0 Python是一种怎样的语言Python是一门跨平台、开源、免费的解释型高级动态编程语言,同时也支持伪编译将Python源程序转换为字节码来优化程序和提高运行速度,并且支持使用py2exe工具将Python程序转换为扩展名为“.exe”的可执行程序,可以在没有安装Python解释器和相关依赖包的Windows平台上运行。Python支持命令式编程、函数式编程,完全支持面向对象程序设计,语法简洁清晰,并且拥有大量的几乎支持所有领域应用开发的成熟扩展库。Python就像胶水一样,可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同
2、应用领域的需求。2.x:一边鄙视一边用3.x:必然的趋势多版本共存与切换简便方法:更改系统环境变量path查看已安装版本的方法(在所启动的IDLE界面也可以直接看到):import sys sys.version2.7.8(default,Jun 30 2014,16:08:48)MSC v.1500 64 bit(AMD64)sys.version_infosys.version_info(major=2,minor=7,micro=8,releaselevel=final,serial=0)1.1 如何选择如何选择Python版本版本安装好Python以后,在“开始”菜单中启动“IDLE(
3、Python GUI)”即可启动Python解释器并可以看到当前安装的Python版本号,如图1-1和图1-2所示。如果您喜欢的话,也可以启动“Python(command line)”来开始美妙的Python之旅。在“IDLE(Python GUI)”和“Python(command line)”两种界面中,都以三个大于号“”作为提示符,您可以在提示符后面输入要执行的语句。1.1 如何选择Python版本n除了在启动主界面上查看已安装的Python版本之外,还可以使用下面的命令随时进行查看。import sys sys.version3.5.1(v3.5.1:37a07cee5969,Dec
4、 6 2015,01:54:25)MSC v.1900 64 bit(AMD64)sys.winver3.5 sys.version_infosys.version_info(major=3,minor=5,micro=1,releaselevel=final,serial=0)1.1 如何选择Python版本有时候可能需要同时安装多个不同的版本,例如同时安装Python 2.7.11和Python 3.5.1,并根据不同的开发需求在两个版本之间进行切换。多版本并存一般不影响在IDLE环境中直接运行程序,只需要启动相应版本的IDLE即可。在命令提示符环境中运行Python程序时,如果无法正确运
5、行,可以尝试在调用Python主程序时指定其完整路径,或者通过修改系统Path变量来实现不同版本之间的切换。1.2 Python安装与简单使用https:/www.python.org/https:/www.python.org/doc/http:/bugs.python.org/https:/ import math math.sqrt(9)3.0 3*(2+6)24 2/0Traceback(most recent call last):File,line 1,in 2/0ZeroDivisionError:integer division or modulo by zero1.2 Pyt
6、hon安装与简单使用在IDLE界面中使用菜单“File”=“New File”创建一个程序文件,输入代码并保存为文件(务必要保证扩展名为“.py”,如果是GUI程序可以保存为“.pyw”文件。如果您保存为其他扩展名的文件,一般并不影响在IDLE中直接运行,但是在“命令提示符”环境中运行时需要显式调用Python主程序,并且在资源管理器中直接双击该文件时可能会无法关联Python主程序从而导致无法运行)后,使用菜单“Run”=“Check Module”来检查程序中是否存在语法错误,或者使用菜单“Run”=“Run Module”运行程序,程序运行结果将直接显示在IDLE交互界面上。也可以通过在
7、资源管理器中双击扩展名为“.py”或“.pyc”的Python程序文件直接运行;在有些情况下,可能还需要您在命令提示符环境中运行Python程序文件。在“开始”菜单的“附件”中单击“命令提示符”,然后执行Python程序。例如,假设有程序HelloWorld.py内容如下。def main():print(Hello world)main()在实际开发中,如果您能够熟练使用集成开发环境IDLE提供的一些快捷键,将会大幅度提高您的编写速度和开发效率。在IDLE环境下,除了撤销(Ctrl+Z)、全选(Ctrl+A)、复制(Ctrl+C)、粘贴(Ctrl+V)、剪切(Ctrl+X)等常规快捷键之外,
8、其他比较常用的快捷键如下表所示。1.3 使用pip管理第三方包Python2中需要单独安装下载地址:https:/pypi.python.org/pypi/pip安装方法:cmd=python get-pip.py用法示例pip install NumPypip listpip install-upgrade SomePackagepip uninstall SomePackagePython 2.7.9和Python 3.4.0之后的安装包中已默认包含pip。1.4.1 Python的对象模型的对象模型对象是python语言中最基本的概念,在python中处理的每样东西都是对象。python
9、中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等;非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random()等。1.4.1 Python的对象模型的对象模型常用内置对象对象类型示例数字1234,3.14,3+4j字符串swfu,Im student,Python 列表1,2,3字典1:food,2:taste,3:import元组(2,-5,6)文件f=open(data.dat,r)集合set(abc),a,b,c布尔型True,False空类型None编程单元类型函数、模块、类在Python中,不需要事先声明变量名及其类型,直接
10、赋值即可创建各种类型的对象变量。例如语句 x=3创建了整型变量x,并赋值为3,再例如语句 x=Hello world.创建了字符串变量x,并赋值为Hello world.。这一点适用于Python任意类型的对象。1.4.2 Python变量变量1.4.2 Python变量变量虽然不需要在使用之前显式地声明变量及其类型,但是Python仍属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。每种类型支持的运算也不完全一样,因此在使用变量时需要程序员自己确定所进行的运算是否合适,以免出现异常或者意料之外的结果。同一个运算符对于不同类型数据操作的含义和计算结果也是不一样的,后面会
11、进行介绍。另外,Python还是一种动态类型语言,也就是说,变量的类型是可以随时变化的。x=3 print(type(x)x=Hello world.print(type(x)x=1,2,3 print(type(x)isinstance(3,int)True isinstance(Hello world,str)True1.4.2 Python变量变量内置函数type()用来返回变量类型,内置函数isinstance()用来测试对象是否为指定类型的实例。代码中首先创建了整型变量x,然后又分别创建了字符串和列表类型的变量x。当创建了字符串类型的变量x之后,之前创建的整型变量x自动失效,创建列表
12、对象x之后,之前创建的字符串变量x自动失效。可以将该模型理解为“状态机”,在显式修改其类型或删除之前,变量将一直保持上次的类型。1.4.2 Python变量变量在大多数情况下,如果变量出现在赋值运算符或复合赋值运算符(例如+=、*=等等)的左边则表示创建变量或修改变量的值,否则表示引用该变量的值,这一点同样适用于使用下标来访问列表、字典等可变序列以及其他自定义对象中元素的情况。例如下面的代码:x=3#创建整型变量 print(x*2)9 x+=6#修改变量值 print(x)#读取变量值并输出显示9 x=1,2,3#创建列表对象 print(x)1,2,3 x1=5#修改列表元素值 print
13、(x)#输出显示整个列表1,5,3 print(x2)#输出显示列表指定元素3n字符串和元组属于不可变序列,这意味着不能通过下标的方式来修改其中的元素值,例如下面的代码试图修改元组中元素的值时抛出异常。x=(1,2,3)print(x)(1,2,3)x1=5Traceback(most recent call last):File,line 1,in x1=5TypeError:tuple object does not support item assignmentn在Python中,允许多个变量指向同一个值,例如:x=3 id(x)1786684560 y=x id(y)178668456
14、0n然而,需要注意的是,继续上面的示例代码,当为其中一个变量修改值以后,其内存地址将会变化,但这并不影响另一个变量,例如接着上面的代码再继续执行下面的代码:x+=6 id(x)1786684752 y3 id(y)1786684560nPython采用的是基于值的内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址,前面的几段代码也说明了这个特点。再例如下面的代码:x=3 id(x)10417624 y=3 id(y)10417624 y=5 id(y)10417600 id(x)104176241.4.2 Python变量变量Python具有自动内存管
15、理功能,对于没有任何变量指向的值,Python自动将其删除。Python会跟踪所有的值,并自动删除不再有变量指向的值。因此,Python程序员一般情况下不需要太多考虑内存管理的问题。尽管如此,显式使用del命令删除不需要的值或显式关闭不再需要访问的资源,仍是一个好的习惯,同时也是一个优秀程序员的基本素养之一。最后,在定义变量名的时候,需要注意以下问题:变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义,本书后面第6章会详细讲解;变量名中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等);不能使用关键字作变量名,可以导入keyword模块后使
16、用print(keyword.kwlist)查看所有Python关键字;不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名,这将会改变其类型和含义,可以通过dir(_builtins_)查看所有内置模块、类型和函数;变量名对英文字母的大小写敏感,例如student和Student是不同的变量。1.4.3 数字数字是python中最常用的对象,属于不可变对象。可以表示任意大小的数字。a=99999999999999999999999999999999 a*a99999999999999999999999999999998000000000000000000000000
17、00000001L a*3999999999999999999999999999999970000000000000000000000000000000299999999999999999999999999999999LPython的IDEL交互界面可以当做简便计算器来使用。1.4.3 数字十进制整数如,0、-1、9、123十六进制整数,需要16个数字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f来表示整数,必须以0 x开头,如0 x10、0 xfa、0 xabcdef八进制整数,只需要8个数字0、1、2、3、4、5、6、7来表示整数,必须以0o开头,如0o35、0o11二进制
18、整数、只需要2个数字0、1来表示整数,必须以0b开头如,0b101、0b100浮点数又称小数15.0、0.37、-11.2、1.2e2、314.15e-21.4.3 数字Python内置支持复数类型。a=3+4j b=5+6j c=a+b c(8+10j)c.real#查看复数实部8.0 c.imag#查看复数虚部10.0 a.conjugate()#返回共轭复数(3-4j)a*b#复数乘法(-9+38j)a/b#复数除法(0.6393442622950819+0.03278688524590165j)1.4.4 字符串用单引号、双引号或三引号括起来的符号系列称为字符串单引号、双引号、三单引号
19、、三双引号可以互相嵌套,用来表示复杂字符串。abc、123、中国、Python字符串属于不可变序列 空串表示为或 三引号或表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。1.4.4 字符串1.1.字符串合并字符串合并 a=abc+123#生成新对象2.2.字符串格式化字符串格式化a=3.6674%7.3f%a 3.667%d:%c%(65,65)65:A My name is%s,and my age is%d%(Dong Fuguo,38)My name is Dong Fuguo,and my age is 381.4.4 字符串3.转义字符转义字符n:
20、换行符:换行符t:制表符:制表符r:回车:回车:单引号:单引号”:双引号:双引号:一个:一个ddd:3位八进制数对应的字符位八进制数对应的字符xhh:2位十六进制数对应的字符位十六进制数对应的字符 字符串界定符前面加字母r表示原始字符串,其中的特殊字符不进行转义,但字符串的最后一个字符不能是。运算符示例功能说明x+y算术加法,列表、元组、字符串合并x-y算术减法,集合差集x*y乘法,序列重复x/y除法(在Python 3.x中叫做真除法)x/y求整商-x相反数x%y余数(对实数也可以进行余数运算),字符串格式化x*y幂运算xy;xy;x=y大小比较(可以连用),集合的包含关系比较x=y;x!=
21、y相等(值)比较,不等(值)比较x or y逻辑或(只有x为假才会计算y)x and y逻辑与(只有x为真才会计算y)not x逻辑非x in y;x not in y成员测试运算符x is y;x is not y对象实体同一性测试(地址)|、&、位运算符&、|、集合交集、并集、对称差集1.4.5 操作符和表达式nPython中的除法有两种,“/”和“/”分别表示除法和整除运算,并且Python 2.x和Python 3.x对“/”运算符的解释也略有区别。Python 2.x将“/”解释为普通除法,而Python 3.x将其解释为真除法。例如,在Python 3.5.1中运算结果如下:3/5
22、0.6 3/50 3.0/50.6 3.0/50.0 13/101-13/10-2而上面的表达式在Python 2.7.11中运算结果如下:3/50 3/50 3.0/50.6 3.0/50.0 13/101-13/10-2n另外一个需要说明的,也是与其他有些语言略有不同的运算符是“%”。在Python中,除去前面已经介绍过的字符串格式化用法之外,该运算符还可以对整数和浮点数计算余数。但是由于浮点数的精确度影响,计算结果可能略有误差。3.1%21.1 6.3%2.12.0999999999999996 6%20 6.0%20.0 6.0%2.00.0 5.7%4.80.900000000000
23、0004nPython中很多运算符有多重含义,在程序中运算符的具体含义取决于操作数的类型,将在后面章节中根据内容组织的需要陆续进行展开。例如“*”运算符就是Python运算符中比较特殊的一个,它不仅可以用于数值乘法,还可以用于列表、字符串、元组等类型,当列表、字符串或元组等类型变量与整数进行“*”运算时,表示对内容进行重复并返回重复后的新对象。3*2#整数相乘6 2.0*3#浮点数与整数相乘6.0(3+4j)*2#复数与整数相乘(6+8j)(3+4j)*(3-4j)#复数与复数相乘(25+0j)a*10#字符串重复aaaaaaaaaa 1,2,3*3#列表重复1,2,3,1,2,3,1,2,3
24、(1,2,3)*3#元组重复(1,2,3,1,2,3,1,2,3)n在Python中,单个任何类型的对象或常数属于合法表达式,使用表1-5中运算符连接的变量和常量以及函数调用的任意组合也属于合法的表达式。a=1,2,3 b=4,5,6 c=a+b c1,2,3,4,5,6 d=list(map(str,c)d1,2,3,4,5,6 import math list(map(math.sin,c)0.8414709848078965,0.9092974268256817,0.1411200080598672,-0.7568024953079282,-0.9589242746631385,-0.2
25、7941549819892586 Hello+worldHello world welcome *3welcome welcome welcome (welcome,*3).rstrip(,)+!welcome,welcome,welcome!n在Python中逗号“,”并不是运算符,而只是一个普通分隔符。a in b,a(False,a)a in(b,a)True x=3,5 x(3,5)3=3,5(True,5)x=3+5,7 x(8,7)1.4.6 常用内置函数内置函数不需要导入任何模块即可使用执行下面的命令可以列出所有内置函数 dir(_builtins_)函数功能简要说明abs(x)
26、返回数字x的绝对值all(iterable)如果对于可迭代对象中所有元素x都有bool(x)为True,则返回True。对于空的可迭代对象也返回Trueany(iterable)只要可迭代对象中存在元素x使得bool(x)为True,则返回True。对于空的可迭代对象,返回Falsebin(x)把数字x转换为二进制串callable(object)测试对象是否可调用。类和函数是可调用的,包含_call_()方法的类的对象也是可调用的chr(x)返回ASCII编码为x的字符cmp(x,y)比较大小,如果xy则返回正数。Python 3.x不再支持该函数dir()返回指定对象的成员列表eval(s
27、,globals,locals)计算字符串中表达式的值并返回filter(function or None,sequence)返回序列中使得函数值为True的那些元素,如果函数为None则返回那些值等价于True的元素。如果序列为元组或字符串则返回相同类型结果,其他则返回列表1.4.6 常用内置函数float(x)把数字或字符串x转换为浮点数并返回help(obj)返回对象obj的帮助信息hex(x)把数字x转换为十六进制串id(obj)返回对象obj的标识(地址)input(提示内容字符串)接收键盘输入的内容,返回字符串。Python 2.x和Python 3.x对该函数的解释不完全一样,详
28、见后面的1.4.8节int(x,d)返回数字的整数部分,或把d进制的字符串x转换为十进制并返回,d默认为十进制isinstance(object,class-or-type-or-tuple)测试对象是否属于指定类型的实例len(obj)返回对象obj包含的元素个数,适用于列表、元组、集合、字典、字符串等类型的对象list(x)、set(x)、tuple(x)、dict(x)把对象转换为列表、集合、元组或字典并返回,或生成空列表、空集合、空元组、空字典map(函数,序列)将函数映射至序列中每个元素,返回列表或map对象max(x)、min(x)、sum(x)返回序列中的最大值、最小值或数值元素
29、之和1.4.6 常用内置函数open(name,mode,buffering)以指定模式打开文件并返回文件对象ord(s)返回1个字符s的编码pow(x,y)返回x的y次方,等价于x*yrange(start,end,step)返回一个等差数列(Python 3.x中返回一个range对象),不包括终值reduce(函数,序列)将接收2个参数的函数以累积的方式从左到右依次应用至序列中每个元素,最终返回单个值作为结果reversed(列表或元组)返回逆序后的迭代器对象round(x,小数位数)对x进行四舍五入,若不指定小数位数,则返回整数str(obj)把对象obj转换为字符串sorted(列表
30、,cmp,keyreverse返回排序后的列表。Python 3.x中的sorted()方法没有cmp参数type(obj)返回对象obj的类型zip(seq1,seq2.)返回(seq10,seq20.),(.)形式的列表1.4.6 常用内置函数nord()和chr()是一对功能相反的函数,ord()用来返回单个字符的序数或Unicode码,而chr()则用来返回某序数对应的字符,str()则直接将其任意类型参数转换为字符串。ord(a)97 chr(65)A chr(ord(A)+1)B str(1)1 str(1234)1234 str(1,2,3)1,2,3 str(1,2,3)(1,
31、2,3)str(1,2,3)set(1,2,3)nmax()、min()、sum()这三个内置函数分别用于计算列表、元组或其他可迭代对象中所有元素最大值、最小值以及所有元素之和,sum()只支持数值型元素的序列或可迭代对象,max()和min()则要求序列或可迭代对象中的元素之间可比较大小。例如下面的示例代码,首先使用列表推导式生成包含10个随机数的列表,然后分别计算该列表的最大值、最小值和所有元素之和。import random a=random.randint(1,100)for i in range(10)a72,26,80,65,34,86,19,74,52,40 print(max(
32、a),min(a),sum(a)86 19 548n如果需要计算该列表中的所有元素的平均值,可以直接使用下面的方法:a=72,26,80,65,34,86,19,74,52,40 sum(a)*1.0/len(a)#Python 2.7.1154.8 sum(a)/len(a)#Python 3.5.154.81.4.6 常用内置函数使用dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作,而help()函数则返回指定模块或函数的说明文档。1.4.7 对象的删除在Python中具有自动内存管理功能,Python解释器会跟踪所有的值,一旦发现某个值不再有任何变量指向,将会自
33、动删除该值。尽管如此,自动内存管理或者垃圾回收机制并不能保证及时释放内存。显式释放自己申请的资源是程序员的好习惯之一,也是程序员素养的重要体现之一。在Python中,可以使用del命令来显式删除对象并解除与值之间的指向关系。删除对象时,如果其指向的值还有别的变量指向则不删除该值,如果删除对象后该值不再有其他变量指向,则删除该值。1.4.7 对象的删除 x=1,2,3,4,5,6 y=3 z=y print(y)3 del y#删除对象 print(y)NameError:name y is not defined print(z)3 del z print(z)NameError:name z
34、 is not defined del x1#删除列表中指定元素 print(x)1,3,4,5,6 del x#删除整个列表 print(x)NameError:name x is not defined1.4.7 对象的删除ndel命令无法删除元组或字符串中的指定元素,而只可以删除整个元组或字符串,因为这两者均属于不可变序列。x=(1,2,3)del x1Traceback(most recent call last):File,line 1,in del x1TypeError:tuple object doesnt support item deletion del x print(x
35、)Traceback(most recent call last):File,line 1,in print(x)NameError:name x is not defined1.4.8 基本输入输出用Python进行程序设计,输入是通过input()函数来实现的,imput()的一般格式为:x=input(提示:)该函数返回输入的对象。可输入数字、字符串和其它任意类型对象。n尽管形式一样,Python 2.x和Python 3.x对该函数的解释略有不同。在Python 2.x中,该函数返回结果的类型由输入值时所使用的界定符来决定,例如下面的Python 2.7.11代码:x=input(Pl
36、ease input:)Please input:3#没有界定符,整数 print type(x)x=input(Please input:)Please input:3#单引号,字符串 print type(x)x=input(Please input:)Please input:1,2,3#方括号,列表 print type(x)n在Python 2.x中,还有另外一个内置函数raw_input()也可以用来接收用户输入的值。与input()函数不同的是,raw_input()函数返回结果的类型一律为字符串,而不论用户使用什么界定符。例如:x=raw_input(Please input:
37、)Please input:1,2,3 print type(x)n在Python 3.x中,不存在raw_input()函数,只提供了input()函数用来接收用户的键盘输入。在Python 3.x中,不论用户输入数据时使用什么界定符,input()函数的返回结果都是字符串,需要将其转换为相应的类型再处理,相当于Python 2.x中的raw_input()函数。例如下面的Python 3.5.1代码:x=input(Please input:)Please input:3 print(type(x)x=input(Please input:)Please input:1 print(typ
38、e(x)x=input(Please input:)Please input:1,2,3 print(type(x)x=raw_input(Please input:)NameError:name raw_input is not defined1.4.8 基本输入输出Python 2.x和Python 3.x的输出方法也不完全一致。在Python 2.x中,使用print语句进行输出,而Python 3.x中使用print()函数进行输出。n默认情况下,Python将结果输出到IDLE或者标准控制台,在输出时也可以进行重定向,例如可以把结果输出到指定文件。在Python 2.7.11中使用下
39、面的方法进行输出重定向:fp=open(rC:mytest.txt,a+)print fp,Hello,world fp.close()n而在Python 3.5.1中则需要使用下面的方法进行重定向:fp=open(rD:mytest.txt,a+)print(Hello,world!,file=fp)fp.close()n另外一个重要的不同是,对于Python 2.x而言,在print语句之后加上逗号“,”则表示输出内容之后不换行,例如:for i in range(10):print i,0 1 2 3 4 5 6 7 8 9n在Python 3.x中,为了实现上述功能则需要使用下面的方法
40、:for i in range(10,20):print(i,end=)10 11 12 13 14 15 16 17 18 191.4.9 模块的使用Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip是管理模块的重要工具。在Python启动时,仅加载了很少的一部分模块,在需要时由程序员显式地加载(可能需要先安装)其他模块。减小运行的压力,仅加载真正需要的模块和功能,且具有很强的可扩展性。可以使用sys.modules.items()显示所有预加载模块的相关信息。1.4.9 模块的使用import 模块名import mathmath.sin(0.5)#求0.5
41、的正弦import randomx=random.random()#获得0,1)内的随机小数y=random.random()n=random.randint(1,100)#获得1,100上的随机整数可以使用dir函数查看任意模块中所有的对象列表,如果调用不带参数的dir()函数,则返回当前脚本的所有名字列表。可以使用help函数查看任意模块或函数的使用帮助。1.4.9 模块的使用from 模块名 import 对象名 as 别名#可以减少查询次数,提高执行速度from math import*#谨慎使用 from math import sin sin(3)0.141120008059867
42、2 from math import sin as f#别名 f(3)0.1411200080598671.4.9 模块的使用在2.x中可以使用reload函数重新导入一个模块,在3.x中,需要使用imp模块的reload函数Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找。可以使用sys模块的path变量查看python导入模块时搜索模块的路径,也可以向其中append自定义的目录以扩展搜索路径。在导入模块时,会优先导入相应的pyc文件,如果相应的pyc文件与py文件时间不相符,则导入py文件并重新编译该模块。1.5 Python
43、代码规范代码规范(1)缩进类定义、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始 python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。同一个级别的代码块的缩进量必须相同。一般而言,以4个空格为基本缩进单位,可以通过下面的方法进行代码块的缩进和反缩进:FortmatIndent Region/Dedent Region1.5 Python代码规范代码规范(2)注释一个好的、可读性强的程序一般包含30%以上的注释。常用的注释方式主要有两种:以#开始,表示本行#之后的内容为注释 包含在一对三引号.或.之间且不属于任何语句的内容将被解释器认为是注释在I
44、DLE开发环境中,可以通过下面的操作快速注释/解除注释大段内容:FormatComment Out Region/Uncomment Region1.5 Python代码规范代码规范(3)每个import只导入一个模块(4)如果一行语句太长,可以在行尾加上来换行分成多行,但是更建议使用括号来包含多行内容。(5)必要的空格与空行运算符两侧、函数参数之间、逗号两侧建议使用空格分开。不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。(6)适当使用异常处理结构进行容错,后面将详细讲解。(7)软件应具有较强的可测试性,测试与开发齐头并进。1.6 Python文件名.py:Python
45、源文件,由Python解释器负责解释执行。.pyw:Python源文件,常用于图形界面程序文件。.pyc:Python字节码文件,无法使用文本编辑器直接查看该类型文件内容,可用于隐藏Python源代码和提高运行速度。对于Python模块,第一次被导入时将被编译成字节码的形式,并在以后再次导入时优先使用“.pyc”文件,以提高模块的加载和运行速度。对于非模块文件,直接执行时并不生成“.pyc”文件,但可以使用py_compile模块的compile()函数进行编译以提高加载和运行速度。另外,Python还提供了compileall模块,其中包含compile_dir()、compile_file
46、()和compile_path()等方法,用来支持批量Python源程序文件的编译。.pyo:优化的Python字节码文件,同样无法使用文本编辑器直接查看其内容。可以使用“python O-m py_compile file.py”或“python OO-m py_compile file.py”进行优化编译。.pyd:一般是由其他语言编写并编译的二进制文件,常用于实现某些软件工具的Python编程接口插件或Python动态链接库。n每个Python脚本在运行时都有一个“_name_”属性。如果脚本作为模块被导入,则其“_name_”属性的值被自动设置为模块名;如果脚本独立运行,则其“_nam
47、e_”属性值被自动设置为“_main_”。例如,假设文件nametest.py中只包含下面一行代码:print(_name_)n在IDLE中直接运行该程序时,或者在命令行提示符环境中运行该程序文件时,运行结果如下:_main_n而将该文件作为模块导入时得到如下执行结果:import nametestnametestn利用“_name_”属性即可控制Python程序的运行方式。例如,编写一个包含大量可被其他程序利用的函数的模块,而不希望该模块可以直接运行,则可以在程序文件中添加以下代码:if _name_=_main_:print(Please use me as a module.)n这样一来
48、,程序直接执行时将会得到提示“Please use me as a module.”,而使用import语句将其作为模块导入后可以使用其中的类、方法、常量或其他成员。1.8 编写自己的包与模块包可以看做处于同一目录中的模块。在包的每个目录中都必须包含一个_init_.py文件,该文件可以是一个空文件,仅用于表示该目录是一个包。_init_.py文件的主要用途是设置_all_变量以及所包含的包初始化所需的代码。其中_all_变量中定义的对象可以在使用from import*时全部正确导入。1.9 Python快速入门问题1:用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。x=inp
49、ut(请输入一个三位数:)x=int(x)a=x/100b=x/10%10c=x%10print(a,b,c)1.9 Python快速入门问题2:已知三角形的两边长及其夹角,求第三边长。import mathx=input(输入两边长及夹角(度):)a,b,theta=map(float,x.split()c=math.sqrt(a*2+b*2-2*a*b*math.cos(theta*math.pi/180)print(c=,c)1.9 Python快速入门问题3:任意输入三个英文单词,按字典顺序输出。s=input(x,y,z=)x,y,z=s.split(,)if x y:x,y=y,x
50、 if x z:x,z=z,xif y z:y,z=z,yprint(x,y,z)或直接写为:s=input(x,y,z=)x,y,z=s.split(,)x,y,z=sorted(x,y,z)print(x,y,z)1.9 Python快速入门例4:Python程序框架生成器。import osimport sysimport datetimehead=#+-*20+n+#Function description:n+#+-*20+n+#Author:Dong Fuguon+#QQ:306467355n+#Email:n+#+-*20+ndesFile=sys.argv1if os.path