1、第1章 基础知识,1.0 Python是一种怎样的语言,Python是一门跨平台、开源、免费的解释型高级动态编程语言,同时也支持伪编译将Python源程序转换为字节码来优化程序和提高运行速度,并且支持使用py2exe工具将Python程序转换为扩展名为“.exe”的可执行程序,可以在没有安装Python解释器和相关依赖包的Windows平台上运行。 Python支持命令式编程、函数式编程,完全支持面向对象程序设计,语法简洁清晰,并且拥有大量的几乎支持所有领域应用开发的成熟扩展库。 Python就像胶水一样,可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足
2、不同应用领域的需求。,1.1 如何选择Python版本,2.x:一边鄙视一边用 3.x:必然的趋势 多版本共存与切换简便方法:更改系统环境变量path 查看已安装版本的方法(在所启动的IDLE界面也可以直接看到): import sys sys.version 2.7.8 (default, Jun 30 2014, 16:08:48) MSC v.1500 64 bit (AMD64) sys.version_info sys.version_info(major=2, minor=7, micro=8, releaselevel=final, serial=0),1.1 如何选择Pytho
3、n版本,安装好Python以后,在“开始”菜单中启动“IDLE(Python GUI)”即可启动Python解释器并可以看到当前安装的Python版本号,如图1-1和图1-2所示。 如果您喜欢的话,也可以启动“Python(command line)”来开始美妙的Python之旅。 在“IDLE(Python GUI)”和“Python(command line)”两种界面中,都以三个大于号“”作为提示符,您可以在提示符后面输入要执行的语句。,1.1 如何选择Python版本,除了在启动主界面上查看已安装的Python版本之外,还可以使用下面的命令随时进行查看。 import sys sys.
4、version 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) MSC v.1900 64 bit (AMD64) sys.winver 3.5 sys.version_info sys.version_info(major=3, minor=5, micro=1, releaselevel=final, serial=0),1.1 如何选择Python版本,有时候可能需要同时安装多个不同的版本,例如同时安装Python 2.7.11和Python 3.5.1,并根据不同的开发需求在两个版本之间进行切换。 多版本并存一般不影响在IDLE环境中
5、直接运行程序,只需要启动相应版本的IDLE即可。在命令提示符环境中运行Python程序时,如果无法正确运行,可以尝试在调用Python主程序时指定其完整路径,或者通过修改系统Path变量来实现不同版本之间的切换。,1.2 Python安装与简单使用,https:/www.python.org/ https:/www.python.org/doc/ http:/bugs.python.org/ https:/ 默认编程环境:IDLE,1.2 Python安装与简单使用,安装好以后,默认以IDLE为开发环境,当然也可以安装使用其他的开发环境,例如PythonWin、PyCharm、WingIDE。
6、本书均以IDLE为例,如果使用交互式编程模式,那么直接在IDLE提示符“”后面输入相应的命令并回车执行即可,如果执行顺利的话,马上就可以看到执行结果,否则会抛出异常。 3+5 8 import math math.sqrt(9) 3.0 3*(2+6) 24 2/0 Traceback (most recent call last):File “, line 1, in 2/0 ZeroDivisionError: integer division or modulo by zero,1.2 Python安装与简单使用,在IDLE界面中使用菜单“File”=“New File”创建一个程序文件
7、,输入代码并保存为文件(务必要保证扩展名为“.py”,如果是GUI程序可以保存为“.pyw”文件。如果您保存为其他扩展名的文件,一般并不影响在IDLE中直接运行,但是在“命令提示符”环境中运行时需要显式调用Python主程序,并且在资源管理器中直接双击该文件时可能会无法关联Python主程序从而导致无法运行)后,使用菜单“Run”=“Check Module”来检查程序中是否存在语法错误,或者使用菜单“Run”=“Run Module”运行程序,程序运行结果将直接显示在IDLE交互界面上。,1.2 Python安装与简单使用,也可以通过在资源管理器中双击扩展名为“.py”或“.pyc”的Pyt
8、hon程序文件直接运行;在有些情况下,可能还需要您在命令提示符环境中运行Python程序文件。在“开始”菜单的“附件”中单击“命令提示符”,然后执行Python程序。例如,假设有程序HelloWorld.py内容如下。 def main():print(Hello world) main(),1.2 Python安装与简单使用,1.2 Python安装与简单使用,1.2 Python安装与简单使用,在实际开发中,如果您能够熟练使用集成开发环境IDLE提供的一些快捷键,将会大幅度提高您的编写速度和开发效率。在IDLE环境下,除了撤销(Ctrl+Z)、全选(Ctrl+A)、复制(Ctrl+C)、粘
9、贴(Ctrl+V)、剪切(Ctrl+X)等常规快捷键之外,其他比较常用的快捷键如下表所示。,1.3 使用pip管理第三方包,Python2中需要单独安装 下载地址:https:/pypi.python.org/pypi/pip 安装方法:cmd=python get-pip.py 用法示例 pip install NumPy pip list pip install -upgrade SomePackage pip uninstall SomePackage Python 2.7.9和Python 3.4.0之后的安装包中已默认包含pip。,1.4.1 Python的对象模型,对象是pytho
10、n语言中最基本的概念,在python中处理的每样东西都是对象。python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等;非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random( )等。,1.4.1 Python的对象模型,常用内置对象,在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量。例如语句 x = 3 创建了整型变量x,并赋值为3,再例如语句 x = Hello world. 创建了字符串变量x,并赋值为Hello world.。这一点适用于Python任意类型的对象。,1.4.2 Pyth
11、on变量,1.4.2 Python变量,虽然不需要在使用之前显式地声明变量及其类型,但是Python仍属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。每种类型支持的运算也不完全一样,因此在使用变量时需要程序员自己确定所进行的运算是否合适,以免出现异常或者意料之外的结果。同一个运算符对于不同类型数据操作的含义和计算结果也是不一样的,后面会进行介绍。另外,Python还是一种动态类型语言,也就是说,变量的类型是可以随时变化的。 x = 3 print(type(x) x = Hello world. print(type(x) x = 1,2,3 print(type(x
12、) isinstance(3, int) True isinstance(Hello world, str) True,1.4.2 Python变量,内置函数type()用来返回变量类型,内置函数isinstance()用来测试对象是否为指定类型的实例。代码中首先创建了整型变量x,然后又分别创建了字符串和列表类型的变量x。当创建了字符串类型的变量x之后,之前创建的整型变量x自动失效,创建列表对象x之后,之前创建的字符串变量x自动失效。可以将该模型理解为“状态机”,在显式修改其类型或删除之前,变量将一直保持上次的类型。,1.4.2 Python变量,在大多数情况下,如果变量出现在赋值运算符或复合
13、赋值运算符(例如+=、*=等等)的左边则表示创建变量或修改变量的值,否则表示引用该变量的值,这一点同样适用于使用下标来访问列表、字典等可变序列以及其他自定义对象中元素的情况。例如下面的代码: x = 3 #创建整型变量 print(x*2) 9 x += 6 #修改变量值 print(x) #读取变量值并输出显示 9 x = 1,2,3 #创建列表对象 print(x) 1, 2, 3 x1 = 5 #修改列表元素值 print(x) #输出显示整个列表 1, 5, 3 print(x2) #输出显示列表指定元素 3,1.4.2 Python变量,字符串和元组属于不可变序列,这意味着不能通过下
14、标的方式来修改其中的元素值,例如下面的代码试图修改元组中元素的值时抛出异常。 x = (1,2,3) print(x) (1, 2, 3) x1 = 5 Traceback (most recent call last):File “, line 1, in x1 = 5 TypeError: tuple object does not support item assignment,1.4.2 Python变量,在Python中,允许多个变量指向同一个值,例如: x = 3 id(x) 1786684560 y = x id(y) 1786684560 然而,需要注意的是,继续上面的示例代码
15、,当为其中一个变量修改值以后,其内存地址将会变化,但这并不影响另一个变量,例如接着上面的代码再继续执行下面的代码: x += 6 id(x) 1786684752 y 3 id(y) 1786684560,1.4.2 Python变量,1.4.2 Python变量,Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址,前面的几段代码也说明了这个特点。再例如下面的代码: x = 3 id(x) 10417624 y = 3 id(y) 10417624 y = 5 id(y) 10417600 id(x) 10417624,1.
16、4.2 Python变量,Python具有自动内存管理功能,对于没有任何变量指向的值,Python自动将其删除。Python会跟踪所有的值,并自动删除不再有变量指向的值。因此,Python程序员一般情况下不需要太多考虑内存管理的问题。尽管如此,显式使用del命令删除不需要的值或显式关闭不再需要访问的资源,仍是一个好的习惯,同时也是一个优秀程序员的基本素养之一。,1.4.2 Python变量,最后,在定义变量名的时候,需要注意以下问题: 变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义,本书后面第6章会详细讲解; 变量名中不能有空格以及标点符号(括号、引号、逗号、斜线
17、、反斜线、冒号、句号、问号等等); 不能使用关键字作变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有Python关键字; 不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名,这将会改变其类型和含义,可以通过dir(_builtins_)查看所有内置模块、类型和函数; 变量名对英文字母的大小写敏感,例如student和Student是不同的变量。,1.4.3 数字,数字是python中最常用的对象,属于不可变对象。 可以表示任意大小的数字。 a=99999999999999999999999999999999 a*a 9999
18、999999999999999999999999999800000000000000000000000000000001L a*3 999999999999999999999999999999970000000000000000000000000000000299999999999999999999999999999999L Python的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来表示整数,必须以0x开头,如0x10、0xfa、0xabcdef 八
19、进制整数,只需要8个数字0、1、2、3、4、5、6、7来表示整数,必须以0o开头,如0o35、0o11 二进制整数、只需要2个数字0、1来表示整数,必须以0b开头如,0b101、0b100,1.4.3 数字,浮点数又称小数 15.0、0.37、-11.2、1.2e2、314.15e-2,1.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 #复数除
20、法 (0.6393442622950819+0.03278688524590165j),1.4.4 字符串,用单引号、双引号或三引号括起来的符号系列称为字符串 单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。 abc、123、中国、“Python“ 字符串属于不可变序列空串表示为或 “ 三引号或“表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。,1.4.4 字符串,1. 字符串合并 a=abc + 123 #生成新对象 2. 字符串格式化 a = 3.6674 %7.3f % a 3.667 “%d:%c“%(65,65) 65:A “M
21、y name is %s, and my age is %d“%(Dong Fuguo,38) My name is Dong Fuguo, and my age is 38,1.4.4 字符串,3. 转义字符 n:换行符 t:制表符 r:回车 :单引号 ”:双引号 :一个 ddd:3位八进制数对应的字符 xhh:2位十六进制数对应的字符字符串界定符前面加字母r表示原始字符串,其中的特殊字符不进行转义,但字符串的最后一个字符不能是。,1.4.5 操作符和表达式,1.4.5 操作符和表达式,Python中的除法有两种,“/”和“/”分别表示除法和整除运算,并且Python 2.x和Python
22、3.x对“/”运算符的解释也略有区别。Python 2.x将“/”解释为普通除法,而Python 3.x将其解释为真除法。例如,在Python 3.5.1中运算结果如下: 3/5 0.6 3/5 0 3.0/5 0.6 3.0/5 0.0 13/10 1 -13/10 -2,1.4.5 操作符和表达式,而上面的表达式在Python 2.7.11中运算结果如下: 3/5 0 3/5 0 3.0/5 0.6 3.0/5 0.0 13/10 1 -13/10 -2,1.4.5 操作符和表达式,另外一个需要说明的,也是与其他有些语言略有不同的运算符是“%”。在Python中,除去前面已经介绍过的字符串
23、格式化用法之外,该运算符还可以对整数和浮点数计算余数。但是由于浮点数的精确度影响,计算结果可能略有误差。 3.1%2 1.1 6.3%2.1 2.0999999999999996 6%2 0 6.0%2 0.0 6.0%2.0 0.0 5.7%4.8 0.9000000000000004,1.4.5 操作符和表达式,Python中很多运算符有多重含义,在程序中运算符的具体含义取决于操作数的类型,将在后面章节中根据内容组织的需要陆续进行展开。例如“*”运算符就是Python运算符中比较特殊的一个,它不仅可以用于数值乘法,还可以用于列表、字符串、元组等类型,当列表、字符串或元组等类型变量与整数进行
24、“*”运算时,表示对内容进行重复并返回重复后的新对象。 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 (1,2,3)*3 #元组重复 (1, 2, 3, 1, 2, 3, 1, 2, 3),1.4.5 操作符和表达式,在Python中,单个任何类型的对象或常数属于合法表达式,使用表1-5中运算符连接的变量和常量以及函数调用的任意组合也属于
25、合法的表达式。 a = 1,2,3 b = 4,5,6 c = a+b c 1, 2, 3, 4, 5, 6 d = list(map(str, c) d 1, 2, 3, 4, 5, 6 import math list(map(math.sin, c) 0.8414709848078965, 0.9092974268256817, 0.1411200080598672, -0.7568024953079282, -0.9589242746631385, -0.27941549819892586 Hello + + world Hello world welcome * 3 welcome
26、welcome welcome (welcome,*3).rstrip(,)+! welcome,welcome,welcome!,1.4.5 操作符和表达式,在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_),1.4.6 常用内置函数,1.4.6 常用内置函数,1.
27、4.6 常用内置函数,1.4.6 常用内置函数,ord()和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, 2, 3) str(1,2,3) set(1, 2, 3),1.4.6 常用内置函数,max()、min()、sum()这三个内置函数分别用于计算列表、元组或其他可迭代对象中所有元
28、素最大值、最小值以及所有元素之和,sum()只支持数值型元素的序列或可迭代对象,max()和min()则要求序列或可迭代对象中的元素之间可比较大小。例如下面的示例代码,首先使用列表推导式生成包含10个随机数的列表,然后分别计算该列表的最大值、最小值和所有元素之和。 import random a = random.randint(1,100) for i in range(10) a 72, 26, 80, 65, 34, 86, 19, 74, 52, 40 print(max(a), min(a), sum(a) 86 19 548 如果需要计算该列表中的所有元素的平均值,可以直接使用下面
29、的方法: a = 72, 26, 80, 65, 34, 86, 19, 74, 52, 40 sum(a)*1.0/len(a) #Python 2.7.11 54.8 sum(a)/len(a) #Python 3.5.1 54.8,1.4.6 常用内置函数,使用dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作,而help()函数则返回指定模块或函数的说明文档。,1.4.7 对象的删除,在Python中具有自动内存管理功能,Python解释器会跟踪所有的值,一旦发现某个值不再有任何变量指向,将会自动删除该值。尽管如此,自动内存管理或者垃圾回收机制并不能保证及时释放
30、内存。显式释放自己申请的资源是程序员的好习惯之一,也是程序员素养的重要体现之一。 在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 is not defined de
31、l x1 #删除列表中指定元素 print(x) 1, 3, 4, 5, 6 del x #删除整个列表 print(x) NameError: name x is not defined,1.4.7 对象的删除,del命令无法删除元组或字符串中的指定元素,而只可以删除整个元组或字符串,因为这两者均属于不可变序列。 x = (1,2,3) del x1 Traceback (most recent call last):File “, line 1, in del x1 TypeError: tuple object doesnt support item deletion del x pri
32、nt(x) Traceback (most recent call last):File “, line 1, in print(x) NameError: name x is not defined,1.4.8 基本输入输出,用Python进行程序设计,输入是通过input( )函数来实现的,imput( )的一般格式为: x=input(提示:) 该函数返回输入的对象。可输入数字、字符串和其它任意类型对象。,1.4.8 基本输入输出,尽管形式一样,Python 2.x和Python 3.x对该函数的解释略有不同。在Python 2.x中,该函数返回结果的类型由输入值时所使用的界定符来决定,
33、例如下面的Python 2.7.11代码: x = input(“Please 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) ,1.4.8 基本输入输出,在Python 2.x中,还有另外一个内置函数raw_input()也可以用来接收用户输入的值。与input()函数不同的是,ra
34、w_input()函数返回结果的类型一律为字符串,而不论用户使用什么界定符。例如: x = raw_input(“Please input:“) Please input:1,2,3 print type(x) ,1.4.8 基本输入输出,在Python 3.x中,不存在raw_input()函数,只提供了input()函数用来接收用户的键盘输入。在Python 3.x中,不论用户输入数据时使用什么界定符,input()函数的返回结果都是字符串,需要将其转换为相应的类型再处理,相当于Python 2.x中的raw_input()函数。例如下面的Python 3.5.1代码: x = input
35、(Please input:) Please input:3 print(type(x) x = input(Please input:) Please input:1 print(type(x) x = input(Please input:) Please input:1,2,3 print(type(x) x = raw_input(Please input:) NameError: name raw_input is not defined,1.4.8 基本输入输出,Python 2.x和Python 3.x的输出方法也不完全一致。在Python 2.x中,使用print语句进行输出,
36、而Python 3.x中使用print()函数进行输出。,1.4.8 基本输入输出,默认情况下,Python将结果输出到IDLE或者标准控制台,在输出时也可以进行重定向,例如可以把结果输出到指定文件。在Python 2.7.11中使用下面的方法进行输出重定向: fp = open(rC:mytest.txt, a+) print fp, “Hello,world“ fp.close() 而在Python 3.5.1中则需要使用下面的方法进行重定向: fp = open(rD:mytest.txt, a+) print(Hello,world!, file = fp) fp.close(),1.
37、4.8 基本输入输出,另外一个重要的不同是,对于Python 2.x而言,在print语句之后加上逗号“,”则表示输出内容之后不换行,例如: for i in range(10):print i, 0 1 2 3 4 5 6 7 8 9 在Python 3.x中,为了实现上述功能则需要使用下面的方法: for i in range(10,20):print(i, end= ) 10 11 12 13 14 15 16 17 18 19,1.4.9 模块的使用,Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip是管理模块的重要工具。 在Python启动时,仅加载了
38、很少的一部分模块,在需要时由程序员显式地加载(可能需要先安装)其他模块。 减小运行的压力,仅加载真正需要的模块和功能,且具有很强的可扩展性。 可以使用sys.modules.items()显示所有预加载模块的相关信息。,1.4.9 模块的使用,import 模块名 import math math.sin(0.5) #求0.5的正弦 import random x=random.random( ) #获得0,1) 内的随机小数 y=random.random( ) n=random.randint(1,100) #获得1,100上的随机整数 可以使用dir函数查看任意模块中所有的对象列表,如果
39、调用不带参数的dir()函数,则返回当前脚本的所有名字列表。 可以使用help函数查看任意模块或函数的使用帮助。,1.4.9 模块的使用,from 模块名 import 对象名 as 别名 #可以减少查询次数,提高执行速度 from math import * #谨慎使用 from math import sin sin(3) 0.1411200080598672 from math import sin as f #别名 f(3) 0.141120008059867,1.4.9 模块的使用,在2.x中可以使用reload函数重新导入一个模块,在3.x中,需要使用imp模块的reload函数
40、Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找。可以使用sys模块的path变量查看python导入模块时搜索模块的路径,也可以向其中append自定义的目录以扩展搜索路径。 在导入模块时,会优先导入相应的pyc文件,如果相应的pyc文件与py文件时间不相符,则导入py文件并重新编译该模块。,1.5 Python代码规范,(1)缩进 类定义、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。同一个级别的代码块的缩进量必须相同。 一般而
41、言,以4个空格为基本缩进单位,可以通过下面的方法进行代码块的缩进和反缩进: FortmatIndent Region/Dedent Region,1.5 Python代码规范,(2)注释 一个好的、可读性强的程序一般包含30%以上的注释。常用的注释方式主要有两种:以#开始,表示本行#之后的内容为注释包含在一对三引号.或“.“之间且不属于任何语句的内容将被解释器认为是注释 在IDLE开发环境中,可以通过下面的操作快速注释/解除注释大段内容: FormatComment Out Region/Uncomment Region,1.5 Python代码规范,(3)每个import只导入一个模块 (4
42、)如果一行语句太长,可以在行尾加上来换行分成多行,但是更建议使用括号来包含多行内容。 (5)必要的空格与空行 运算符两侧、函数参数之间、逗号两侧建议使用空格分开。 不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。 (6)适当使用异常处理结构进行容错,后面将详细讲解。 (7)软件应具有较强的可测试性,测试与开发齐头并进。,1.6 Python文件名,.py:Python源文件,由Python解释器负责解释执行。 .pyw:Python源文件,常用于图形界面程序文件。 .pyc:Python字节码文件,无法使用文本编辑器直接查看该类型文件内容,可用于隐藏Python源代码和提
43、高运行速度。对于Python模块,第一次被导入时将被编译成字节码的形式,并在以后再次导入时优先使用“.pyc”文件,以提高模块的加载和运行速度。对于非模块文件,直接执行时并不生成“.pyc”文件,但可以使用py_compile模块的compile()函数进行编译以提高加载和运行速度。另外,Python还提供了compileall模块,其中包含compile_dir()、compile_file()和compile_path()等方法,用来支持批量Python源程序文件的编译。 .pyo:优化的Python字节码文件,同样无法使用文本编辑器直接查看其内容。可以使用“python O -m py_
44、compile file.py”或“python OO -m py_compile file.py”进行优化编译。 .pyd:一般是由其他语言编写并编译的二进制文件,常用于实现某些软件工具的Python编程接口插件或Python动态链接库。,1.7 Python脚本的“_name_”属性,每个Python脚本在运行时都有一个“_name_”属性。如果脚本作为模块被导入,则其“_name_”属性的值被自动设置为模块名;如果脚本独立运行,则其“_name_”属性值被自动设置为“_main_”。例如,假设文件nametest.py中只包含下面一行代码: print(_name_) 在IDLE中直接运
45、行该程序时,或者在命令行提示符环境中运行该程序文件时,运行结果如下: _main_ 而将该文件作为模块导入时得到如下执行结果: import nametest nametest,1.7 Python脚本的“_name_”属性,利用“_name_”属性即可控制Python程序的运行方式。例如,编写一个包含大量可被其他程序利用的函数的模块,而不希望该模块可以直接运行,则可以在程序文件中添加以下代码: if _name_ = _main_:print(Please use me as a module.) 这样一来,程序直接执行时将会得到提示“Please use me as a module.”,
46、而使用import语句将其作为模块导入后可以使用其中的类、方法、常量或其他成员。,1.8 编写自己的包与模块,包可以看做处于同一目录中的模块。 在包的每个目录中都必须包含一个_init_.py文件,该文件可以是一个空文件,仅用于表示该目录是一个包。 _init_.py文件的主要用途是设置_all_变量以及所包含的包初始化所需的代码。其中_all_变量中定义的对象可以在使用from import *时全部正确导入。,1.9 Python快速入门,问题1:用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。 x = input(请输入一个三位数:) x = int(x) a = x/10
47、0 b = x/10%10 c = x%10 print(a, b, c),1.9 Python快速入门,问题2:已知三角形的两边长及其夹角,求第三边长。 import math x = 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(,)
48、if x y:x, y = y, x if x z:x, z = z, x if y z:y, z = z, y print(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 os import sys import datetime head = # +-*20+n+# Function description:n+# +-*20+n+# Author: Dong Fugu
49、on+# QQ: 306467355n+# Email: n+#+-*20+n desFile = sys.argv1 if os.path.exists(desFile) or not desFile.endswith(.py):print(%s already exist or is not a Python code file.!%desFile)sys.exit() fp = open(desFile, w) today = str(datetime.date.today().year)+-+str(datetime.date.today().month)+-+str(datetime.date.today().day) fp.write(# -*- coding:utf-8 -*-n) fp.write(# Filename: +desFile+n) fp.write(head) fp.write(# Date: +today+n) fp.write(# +-*20+n) fp.close(),