收藏 分享(赏)

廖雪峰python教程.doc

上传人:HR专家 文档编号:6295680 上传时间:2019-04-05 格式:DOC 页数:129 大小:1.01MB
下载 相关 举报
廖雪峰python教程.doc_第1页
第1页 / 共129页
廖雪峰python教程.doc_第2页
第2页 / 共129页
廖雪峰python教程.doc_第3页
第3页 / 共129页
廖雪峰python教程.doc_第4页
第4页 / 共129页
廖雪峰python教程.doc_第5页
第5页 / 共129页
点击查看更多>>
资源描述

1、Python 教程这是小白的 Python 新手教程。Python 是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的 C 语言,非常流行的 Java 语言,适合初学者的 Basic 语言,适合网页编程的JavaScript 语言,等等。那 Python 是一种什么语言?首选,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 MP3,编写一个文档等等,而计算机干活的 CPU 只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成 CPU 可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很

2、大。比如,完成同一个任务,C 语言要写 1000 行代码,Java 只需要写 100 行,而 Python 可能只要 20 行。所以 Python 是一种相当高级的语言。你也许会问,代码少还不好?代码少的代价是运行速度慢,C 程序运行 1 秒钟,Java 程序可能需要 2 秒,而 Python 程序可能就需要 10 秒。那是不是越低级的程序越难学,越高级的程序越简单?表面上来说,是的,但是,在非常高的抽象计算中,高级的 Python 程序设计也是非常难学的,所以,高级程序语言不等于简单。但是,对于初学者和完成普通任务,Python 语言是非常简单易用的。连 Google 都在大规模使用 Pyt

3、hon,你就不用担心学了会没用。用 Python 可以做什么?可以做日常任务,比如自动备份你的 MP3;可以做网站后台,你现在看到的网站就是 Python 写的;可以做网络游戏的后台,很多在线游戏的后台都是 Python开发的。总之就是能干很多很多事啦。Python 当然也有不能干的事情,比如写操作系统,这个只能用 C 语言写;写手机应用,只能用 Objective-C(针对 iPhone)和 Java(针对 Android) ;写 3D 游戏,最好用 C 或 C+。如果你是小白用户,满足以下条件:会使用电脑,但从来没写过程序;还记得初中数学学的方程式和一点点代数知识;想从编程小白变成专业的软

4、件架构师;每天能抽出半个小时学习。不要再犹豫了,这个教程就是为你准备的!准备好了吗?关于作者廖雪峰,十年软件开发经验,业余产品经理,精通 Java/Python/Ruby/Visual Basic/Objective C 等,对开源框架有深入研究,著有Spring 2.0 核心技术与最佳实践一书,多个业余开源项目托管在 GitHub,欢迎微博交流:Python 简介Python 是著名的“ 龟叔”Guido van Rossum 在 1989 年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。现在,全世界差不多有 600 多种编程语言,但流行的编程语言也就那么 20 来种。如果你听说过

5、TIOBE 排行榜,你就能知道编程语言的大致流行程度。这是最近 10 年最常用的 10 种编程语言的变化图:总的来说,这几种编程语言各有千秋。C 语言是可以用来编写操作系统的贴近硬件的语言,所以,C 语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而 Python 是用来编写应用程序的高级编程语言。当你用一种语言开始作真正的软件开发时,你除了编写代码外,还需要很多基本的已经写好的现成的东西,来帮助你加快开发进度。比如说,要编写一个电子邮件客户端,如果先从最底层开始编写网络协议相关的代码,那估计一年半载也开发不出来。高级编程语言通常都会提供一个比较完善的基础代码库,让你能直接调用,比如,针

6、对电子邮件协议的SMTP 库,针对桌面环境的 GUI 库,在这些已有的代码库的基础上开发,一个电子邮件客户端几天就能开发出来。Python 就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI 、数据库、文本等大量内容,被形象地称作“内置电池(batteries included) ”。用 Python 开发,许多功能不必从零编写,直接使用现成的即可。除了内置的库外,Python 还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。许多大型网站就是用 Python 开发的,例如 YouTube、Instagram

7、,还有国内的豆瓣。很多大公司,包括 Google、Yahoo 等,甚至 NASA(美国航空航天局)都大量地使用 Python。龟叔给 Python 的定位是“ 优雅 ”、 “明确”、 “简单” ,所以 Python 程序看上去总是简单易懂,初学者学 Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。总的来说,Python 的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。如果一个资深程序员向你炫耀他写的晦涩难懂、动不动就几万行的代码,你可以尽情地嘲笑他。那 Python 适合开发哪些类型的应用呢?首选是网络应用,包括网站、后台服务等等;其次是许多日常需要的

8、小工具,包括系统管理员需要的脚本任务等等;另外就是把其他语言开发的程序再包装起来,方便使用。最后说说 Python 的缺点。任何编程语言都有缺点,Python 也不例外。优点说过了,那 Python 有哪些缺点呢?第一个缺点就是运行速度慢,和 C 程序相比非常慢,因为 Python 是解释型语言,你的代码在执行时会一行一行地翻译成 CPU 能理解的机器码,这个翻译过程非常耗时,所以很慢。而 C 程序是运行前直接编译成 CPU 能执行的机器码,所以非常快。但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载 MP3 的网络应用程序,C 程序的运行时间需要 0.001

9、 秒,而 Python 程序的运行时间需要 0.1 秒,慢了 100 倍,但由于网络更慢,需要等待 1 秒,你想,用户能感觉到 1.001 秒和1.1 秒的区别吗?这就好比 F1 赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1 赛车理论时速高达 400 公里,但由于三环路堵车的时速只有 20 公里,因此,作为乘客,你感觉的时速永远是 20 公里。第二个缺点就是代码不能加密。如果要发布你的 Python 程序,实际上就是发布源代码,这一点跟 C 语言不同,C 语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows 上常见的 xxx.exe 文件)发布出去。要从机器码反推出

10、 C 代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。再说了,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像 Linux 一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了。当然,Python 还有其他若干小缺点,请自行忽略,

11、就不一一列举了。安装 Python因为 Python 是跨平台的,它可以运行在 Windows、Mac 和各种 Linux/Unix 系统上。在Windows 上写 Python 程序,放到 Linux 上也是能够运行的。要开始学习 Python 编程,首先就得把 Python 安装到你的电脑里。安装后,你会得到Python 解释器(就是负责运行 Python 程序的) ,一个命令行交互环境,还有一个简单的集成开发环境。2.x 还是 3.x目前,Python 有两个版本,一个是 2.x 版,一个是 3.x 版,这两个版本是不兼容的,因为现在 Python 正在朝着 3.x 版本进化,在进化过程

12、中,大量的针对 2.x 版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在 3.x 上使用。为了保证你的程序能用到大量的第三方库,我们的教程仍以 2.x 版本为基础,确切地说,是 2.7 版本。请确保你的电脑上安装的 Python 版本是 2.7.x,这样,你才能无痛学习这个教程。在 Mac 上安装 Python如果你正在使用 Mac,系统是 OS X 10.8 或者最新的 10.9 Mavericks,恭喜你,系统自带了Python 2.7。如果你的系统版本低于 10.8,请自行备份系统并免费升级到最新的 10.9,就可以获得 Python 2.7。查看系统版本的办法是点击左上

13、角的苹果图标,选择“关于本机”:在 Linux 上安装 Python如果你正在使用 Linux,那我可以假定你有 Linux 系统管理经验,自行安装 Python 2.7 应该没有问题,否则,请换回 Windows 系统。对于大量的目前仍在使用 Windows 的同学,如果短期内没有打算换 Mac,就可以继续阅读以下内容。在 Windows 上安装 Python首先,从 Python 的官方网站 www.python.org 下载最新的 2.7.6 版本,地址是这个:http:/www.python.org/ftp/python/2.7.6/python-2.7.6.msi然后,运行下载的 M

14、SI 安装包,不需要更改任何默认设置,直接一路点“Next” 即可完成安装:默认会安装到 C:Python27 目录下,但是当你兴致勃勃地打开命令提示符窗口,敲入python 后,会得到:python不是内部或外部命令,也不是可运行的程序或批处理文件。这是因为 Windows 会根据一个 Path 的环境变量设定的路径去查找 python.exe,如果没找到,就会报错。解决办法是把 python.exe 所在的路径 C:Python27 添加到 Path 中。在控制面板中打开“系统属性”,点击“ 高级”, “环境变量”,打开 “环境变量”窗口,在系统变量中,找到“Path”变量,然后点击“ 编

15、辑”:在“编辑系统变量” 的窗口中,可以看到,变量名是 Path,在变量值的最后面,先添加一个分号“;”(注意用英文输入法,千万不要输入中文分号) ,再写上 C:Python27(如果安装的时候没有更改过安装目录) ,然后连续点“确定”, “确定”, “确定”把所有窗口都关掉。现在,再打开一个新的命令行窗口(一定要关掉原来的命令行窗口,再新开一个) ,输入python:看到上面的画面,就说明 Python 安装成功!你看到提示符就表示我们已经在 Python 交互式环境中了,可以输入任何 Python 代码,回车后会立刻得到执行结果。现在,输入 exit()并回车,就可以退出 Python 交

16、互式环境(直接关掉命令行窗口也可以!) 。小结学会如何把 Python 安装到计算机中,并且熟练打开和退出 Python 交互式环境。第一个 Python 程序现在,了解了如何启动和退出 Python 的交互式环境,我们就可以正式开始编写 Python 代码了。在写代码之前,请千万不要用“复制”-“粘贴” 把代码从页面粘贴到你自己的电脑上。写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中,初学者经常会敲错代码,所以,你需要仔细地检查、对照,才能以最快的速度掌握如何写程序。在交互式环境的提示符下,直接输入代码,按回车,就可以立刻得到代码执行结果。现在,试试输入 1

17、00+200,看看计算结果是不是 300: 100+200300很简单吧,任何有效的数学计算都可以算出来。如果要让 Python 打印出指定的文字,可以用 print 语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号: print hello, worldhello, world这种用单引号或者双引号括起来的文本在程序中叫字符串,今后我们还会经常遇到。最后,用 exit()退出 Python,我们的第一个 Python 程序完成!唯一的缺憾是没有保存下来,下次运行时还要再输入一遍代码。小结在 Python 交互式命令行下,可以直接输入代码,然后执行,并立刻得到结果。

18、使用文本编辑器在 Python 的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。现在,我们就把上次的hello, world程序用文本编辑器写出来,保存下来。所以问题又变成了:用什么文本编辑器?推荐两款文本编辑器:一个是 Sublime Text,免费使用,但是不付费会弹出提示框:一个是 Notepad+,免费使用,有中文界面:请注意,用哪个都行,但是绝对不能用 Word 和 Windows 自带的记事本。Word 保存的不是纯文本文件,

19、而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM) ,结果会导致程序运行出现莫名其妙的错误。安装好文本编辑器后,输入以下代码:print hello, world注意 print 前面不要有任何空格。然后,选择一个目录,例如 C:Workspace,把文件保存为hello.py,就可以打开命令行窗口,把当前目录切换到 hello.py 所在目录,就可以运行这个程序了:C:Workspacepython hello.pyhello, world也可以保存为别的名字,比如 abc.py,但是必须要以.py 结尾,其他的都不行。此外,文件名只能是英文字母、数字和下划线的组合。

20、如果当前目录下没有 hello.py 这个文件,运行 python hello.py 就会报错:python hello.pypython: cant open file hello.py: Errno 2 No such file or directory报错的意思就是,无法打开 hello.py 这个文件,因为文件不存在。这个时候,就要检查一下当前目录下是否有这个文件了。还有同学问,能不能像.exe 文件那样直接运行.py 文件呢?在 Windows 上是不行的,但是,在 Mac 和 Linux 上是可以的,方法是在.py 文件的第一行加上:#!/usr/bin/env python然后,

21、通过命令:$ chmod a+x hello.py就可以直接运行 hello.py 了,比如在 Mac 下运行:小结用文本编辑器写 Python 程序,然后保存为后缀为.py 的文件,就可以用 Python 直接运行这个程序了。用 Python 开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!前提是得有个 27的超大显示器!输入和输出输出用 print 加上字符串,就可以向屏幕上输出指定的文字。比如输出hello, world,用代码实现如下: print hello, worldprint 语句也可以跟上多个字符串

22、,用逗号“,”隔开,就可以连成一串输出: print The quick brown fox, jumps over, the lazy dogThe quick brown fox jumps over the lazy dogprint 会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:print 也可以打印整数,或者计算结果: print 300300 print 100 + 200300因此,我们可以把计算 100 + 200 的结果打印得更漂亮一点: print 100 + 200 =, 100 + 200100 + 200 = 300注意,对于

23、100 + 200,Python 解释器自动计算出结果 300,但是,100 + 200 =是字符串而非数学公式,Python 把它视为字符串,请自行解释上述打印结果。输入现在,你已经可以用 print 输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python 提供了一个 raw_input,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字: name = raw_input()Michael当你输入 name = raw_input()并按下回车后,Python 交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。输入完成后,不会有

24、任何提示,Python 交互式命令行又回到 状态了。那我们刚才输入的内容到哪去了?答案是存放到 name 变量里了。可以直接输入 name 查看变量内容: nameMichael什么是变量?请回忆初中数学所学的代数基础知识:设正方形的边长为 a,则正方形的面积为 a x a。把边长 a 看做一个变量,我们就可以根据a 的值计算正方形的面积,比如:若 a=2,则面积为 a x a = 2 x 2 = 4;若 a=3.5,则面积为 a x a = 3.5 x 3.5 = 12.25。在计算机程序中,变量不仅可以为整数或浮点数,还可以是字符串,因此,name 作为一个变量就是一个字符串。要打印出 n

25、ame 变量的内容,除了直接写 name 然后按回车外,还可以用 print 语句: print nameMichael有了输入和输出,我们就可以把上次打印hello, world的程序改成有点意义的程序了:name = raw_input()print hello, name运行上面的程序,第一行代码会让用户输入任意字符作为自己的名字,然后存入 name 变量中;第二行代码会根据用户的名字向用户说 hello,比如输入 Michael:C:Workspace python hello.pyMichaelhello, Michael但是程序运行的时候,没有任何提示信息告诉用户:“嘿,赶紧输入你

26、的名字”,这样显得很不友好。幸好,raw_input 可以让你显示一个字符串来提示用户,于是我们把代码改成:name = raw_input(please enter your name: )print hello, name再次运行这个程序,你会发现,程序一运行,会首先打印出 please enter your name:,这样,用户就可以根据提示,输入名字后,得到 hello, xxx 的输出:C:Workspace python hello.pyplease enter your name: Michaelhello, Michael每次运行该程序,根据用户输入的不同,输出结果也会不同。

27、在命令行下,输入和输出就是这么简单。小结任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是 Input,输出是 Output,因此,我们把输入输出统称为 Input/Output,或者简写为IO。raw_input 和 print 是在命令行下面最基本的输入和输出,但是,用户也可以通过其他更高级的图形界面完成输入和输出,比如,在网页上的一个文本框输入自己的名字,点击“确定”后在网页上看到输出信息。Python 基础Python 是一种计算机编程语言。计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就

28、是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能有歧义,所以,任何一种编程语言都有自己的一套语法,编译器或者解释器就是负责把符合语法的程序代码转换成 CPU 能够执行的机器码,然后执行。Python 也不例外。Python 的语法比较简单,采用缩进方式,写出来的代码就像下面的样子:# print absolute value of an integer:a = 100if a = 0:print aelse:print -a以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号“:

29、”结尾时,缩进的语句视为代码块。缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是 Tab。按照约定俗成的管理,应该始终坚持使用 4 个空格的缩进。缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。缩进的坏处就是“复制粘贴”功能失效了,这是最坑爹的地方。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。此外,IDE 很难像格式化 Java 代码那样格式化Python 代码。最后,请务必注意,Python 程序是大小写敏感的,如果写错了大小写,程序会报错。数据类型和变量数据类型计算机顾名思义就是可以做数学计算

30、的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在 Python 中,能够直接处理的数据类型有以下几种:整数Python 可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用 0x 前缀和 0-9,a-f 表示,例如:0xff00,0xa5b4c3d2,等等。浮点数浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,

31、一个浮点数的小数点位置是可变的,比如,1.23x109 和 12.3x108 是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10 用 e 替代,1.23x109 就是 1.23e9,或者 12.3e8,0.000012 可以写成 1.2e-5,等等。整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!) ,而浮点数运算则可能会有四舍五入的误差。字符串字符串是以或“ 括起来的任意文本,比如abc,“xyz“ 等等。请注意,或“ 本身只是一种表示方式,不是字符串的一部分,因此,字

32、符串abc只有 a,b,c 这 3 个字符。如果本身也是一个字符,那就可以用“括起来,比如 “Im OK“包含的字符是 I,m,空格,O,K 这6 个字符。如果字符串内部既包含又包含“怎么办?可以用转义字符 来标识,比如:Im “OK“!表示的字符串内容是:Im “OK“!转义字符可以转义很多字符,比如 n 表示换行,t 表示制表符,字符本身也要转义,所以表示的字符就是,可以在 Python 的交互式命令行用 print 打印字符串看看: print Im ok.Im ok. print Im learningnPython.Im learningPython. print n如果字符串里面有

33、很多字符都需要转义,就需要加很多,为了简化,Python 还允许用 r表示内部的字符串默认不转义,可以自己试试: print t print rtt如果字符串内部有很多换行,用n 写在一行里不好阅读,为了简化,Python 允许用. 的格式表示多行内容,可以自己试试: print line1. line2. line3line1line2line3上面是在交互式命令行内输入,如果写成程序,就是:print line1line2line3多行字符串.还可以在前面加上 r 使用,请自行测试。布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有 True、False 两种值,要么是 True,要么是

34、 False,在 Python 中,可以直接用 True、False 表示布尔值(请注意大小写) ,也可以通过布尔运算计算出来: TrueTrue FalseFalse 3 2True 3 5False布尔值可以用 and、or 和 not 运算。and 运算是与运算,只有所有都为 True,and 运算结果才是 True: True and TrueTrue True and FalseFalse False and FalseFalseor 运算是或运算,只要其中有一个为 True,or 运算结果就是 True: True or TrueTrue True or FalseTrue Fal

35、se or FalseFalsenot 运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True: not TrueFalse not FalseTrue布尔值经常用在条件判断中,比如:if age = 18:print adultelse:print teenager空值空值是 Python 里一个特殊的值,用 None 表示。None 不能理解为 0,因为 0 是有意义的,而 None 是一个特殊的空值。此外,Python 还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。变量变量的概念基本上和初中代数的方程变量是一致的,只

36、是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:a = 1变量 a 是一个整数。t_007 = T007变量 t_007 是一个字符串。Answer = True变量 Answer 是一个布尔值 True。在 Python 中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:a = 123 # a 是整数print aa = ABC # a 变为字符串print a这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言

37、。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如 Java 是静态语言,赋值语句如下(/ 表示注释):int a = 123; / a 是整数类型变量a = “ABC“; / 错误:不能把字符串赋给整型变量和静态语言相比,动态语言更灵活,就是这个原因。请不要把赋值语句的等号等同于数学的等号。比如下面的代码:x = 10x = x + 2如果从数学上理解 x = x + 2 那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式 x + 2,得到结果 12,再赋给变量 x。由于 x 之前的值是 10,重新赋值后,x 的值变成12。最后,理解变量在计算机内存中的

38、表示也非常重要。当我们写:a = ABC时,Python 解释器干了两件事情:在内存中创建了一个ABC的字符串;在内存中创建了一个名为 a 的变量,并把它指向ABC。也可以把一个变量 a 赋值给另一个变量 b,这个操作实际上是把变量 b 指向变量 a 所指向的数据,例如下面的代码:a = ABCb = aa = XYZprint b最后一行打印出变量 b 的内容到底是ABC呢还是XYZ ?如果从数学意义上理解,就会错误地得出 b 和 a 相同,也应该是XYZ ,但实际上 b 的值是ABC,让我们一行一行地执行代码,就可以看到到底发生了什么事:执行 a = ABC,解释器创建了字符串ABC和变量

39、 a,并把 a 指向ABC:执行 b = a,解释器创建了变量 b,并把 b 指向 a 指向的字符串ABC:执行 a = XYZ,解释器创建了字符串XYZ ,并把 a 的指向改为 XYZ,但 b 并没有更改:所以,最后打印变量 b 的结果自然是ABC了。常量所谓常量就是不能变的变量,比如常用的数学常数 就是一个常量。在 Python 中,通常用全部大写的变量名表示常量:PI = 3.14159265359但事实上 PI 仍然是一个变量,Python 根本没有任何机制保证 PI 不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量 PI 的值,也没人能拦住你。最

40、后解释一下整数的除法为什么也是精确的,可以试试: 10 / 33你没有看错,整数除法永远是整数,即使除不尽。要做精确的除法,只需把其中一个整数换成浮点数做除法就可以: 10.0 / 33.3333333333333335因为整数除法只取结果的整数部分,所以 Python 还提供一个余数运算,可以得到两个整数相除的余数: 10 % 31无论整数做除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。小结Python 支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。字符串和编码字符编码我们已

41、经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用 8 个比特(bit)作为一个字节(byte) ,所以,一个字节能表示的最大的整数就是 255(二进制 11111111=十进制 255) ,如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是 65535,4 个字节可以表示的最大整数是4294967295。由于计算机是美国人发明的,因此,最早只有 127 个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为 ASCII 编

42、码,比如大写字母 A 的编码是65,小写字母 z 的编码是 122。但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和 ASCII 编码冲突,所以,中国制定了 GB2312 编码,用来把中文编进去。你可以想得到的是,全世界有上百种语言,日本把日文编到 Shift_JIS 里,韩国把韩文编到Euc-kr 里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此,Unicode 应运而生。Unicode 把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode 标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到

43、非常偏僻的字符,就需要 4 个字节) 。现代操作系统和大多数编程语言都直接支持 Unicode。现在,捋一捋 ASCII 编码和 Unicode 编码的区别:ASCII 编码是 1 个字节,而 Unicode 编码通常是 2 个字节。字母 A 用 ASCII 编码是十进制的 65,二进制的 01000001;字符 0 用 ASCII 编码是十进制的 48,二进制的 00110000,注意字符0和整数 0 是不同的;汉字中已经超出了 ASCII 编码的范围,用 Unicode 编码是十进制的 20013,二进制的01001110 00101101。你可以猜测,如果把 ASCII 编码的 A 用

44、Unicode 编码,只需要在前面补 0 就可以,因此,A 的 Unicode 编码是 00000000 01000001。新的问题又出现了:如果统一成 Unicode 编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用 Unicode 编码比 ASCII 编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以,本着节约的精神,又出现了把 Unicode 编码转化为 “可变长编码”的 UTF-8 编码。UTF-8 编码把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编

45、码成 4-6 个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间:字符 ASCII Unicode UTF-8A 01000001 00000000 01000001 01000001中 x 01001110 00101101 11100100 10111000 10101101从上面的表格还可以发现,UTF-8 编码有一个额外的好处,就是 ASCII 编码实际上可以被看成是 UTF-8 编码的一部分,所以,大量只支持 ASCII 编码的历史遗留软件可以在 UTF-8编码下继续工作。搞清楚了 ASCII、Unicode 和 UTF-8 的关系,我们就可以总结一下现在计

46、算机系统通用的字符编码工作方式:在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 编码。用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为 Unicode 字符到内存里,编辑完成后,保存的时候再把 Unicode 转换为 UTF-8 保存到文件:浏览网页的时候,服务器会把动态生成的 Unicode 内容转换为 UTF-8 再传输到浏览器:所以你看到很多网页的源码上会有类似的信息,表示该网页正是用的 UTF-8 编码。Python 的字符串搞清楚了令人头疼的字符编码问题后,我们再来研究 Python 对 Unicode 的支持。因为

47、 Python 的诞生比 Unicode 标准发布的时间还要早,所以最早的 Python 只支持 ASCII编码,普通的字符串ABC在 Python 内部都是 ASCII 编码的。Python 提供了 ord()和 chr()函数,可以把字母和对应的数字相互转换: ord(A)65 chr(65)APython 在后来添加了对 Unicode 的支持,以 Unicode 表示的字符串用 u.表示,比如: print u中文中文 u中 uu4e2d写 u中和 uu4e2d是一样的, u 后面是十六进制的 Unicode 码。因此,uA和 uu0041也是一样的。两种字符串如何相互转换?字符串xx

48、x虽然是 ASCII 编码,但也可以看成是 UTF-8 编码,而 uxxx则只能是 Unicode 编码。把 uxxx转换为 UTF-8 编码的xxx用 encode(utf-8)方法: uABC.encode(utf-8)ABC u中文 .encode(utf-8)xe4xb8xadxe6x96x87英文字符转换后表示的 UTF-8 的值和 Unicode 值相等(但占用的存储空间不同) ,而中文字符转换后 1 个 Unicode 字符将变为 3 个 UTF-8 字符,你看到的xe4 就是其中一个字节,因为它的值是 228,没有对应的字母可以显示,所以以十六进制显示字节的数值。len() 函数可以返回字符串的长度: len(uABC)3 len(ABC)3 len(u中文)2 len(xe4xb8xadxe6x96x87)6反过来,把 UTF-8 编码表示的字符串 xxx转换为 Unicode 字符串 uxxx用 decode(utf-8)方法: abc.decode(utf-8)uabc xe4xb8xadxe6x96x87.decode(utf-8)uu4e2du6587 print xe4xb8xadxe6x96x87.decode(utf-8)中文由于 Python 源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报