收藏 分享(赏)

python-中文手册.pdf

上传人:weiwoduzun 文档编号:3979117 上传时间:2018-12-02 格式:PDF 页数:132 大小:912.91KB
下载 相关 举报
python-中文手册.pdf_第1页
第1页 / 共132页
python-中文手册.pdf_第2页
第2页 / 共132页
python-中文手册.pdf_第3页
第3页 / 共132页
python-中文手册.pdf_第4页
第4页 / 共132页
python-中文手册.pdf_第5页
第5页 / 共132页
点击查看更多>>
资源描述

1、Python入门教程Release: 3.2.2docspy3zh.readthedocs.org2013年10月28日目录1目录第一章开胃菜4第二章使用Python解释器72.1调用Python解释器. 72.1.1参数传递. . . 82.1.2交互模式. . . 92.2解释器及其环境. . . . 102.2.1错误处理. . . 102.2.2可执行的Python脚本. 102.2.3源程序编码. . 112.2.4交互式启动文件112.2.5定制模块. . . 12第三章非正式介绍Python 123.1把Python当计算器使用. . . . . . . . . . 133.1.

2、1数值. . . . . . 133.1.2字符串. . . . . 163.1.3关于Unicode . 213.1.4列表. . . . . . 223.2编程第一步. . . . . . 24第四章深入流程控制264.1 if语句. . . . . . . . . 264.2 for语句. . . . . . . . 264.3 range函式. . . . . . . 274.4 break和continue语句,以及循环中的else子句. . . . . . . . . . 294.5 pass语句. . . . . . . 304.6定义函式. . . . . . . 304.7深

3、入函式定义. . . . . 334.7.1默认参数. . . 334.7.2关键字参数. . 344.7.3任意参数表. . 364.7.4解包参数列表. 374.7.5 Lambda形式. 384.7.6文档字符串. . 384.8插曲:代码风格. . . . 39第五章数据结构405.1深入列表. . . . . . . 405.1.1把列表当成堆栈用. . . . . . 425.1.2把列表当队列使用. . . . . . 425.1.3列表推导式. . 435.1.4嵌套列表推导式445.2 del语句. . . . . . . . 455.3元组和序列. . . . . . 46

4、5.4集合(Set) . . . . . . . 475.5字典. . . . . . . . . . 485.6遍历技巧. . . . . . . 505.7深入条件控制. . . . . 51目录25.8序列和其它类型的比较52第六章模块536.1深入模块. . . . . . . 556.1.1把模块当脚本执行. . . . . . 566.1.2模块搜索路径. 566.1.3 “已编译”的Python文件. 576.2标准模块. . . . . . . 586.3 dir()函式. . . . . . 596.4包. . . . . . . . . . . 616.4.1从包中导入*

5、. 636.4.2内部包参考. . 656.4.3多目录的包. . 65第七章输入和输出657.1 Fancier输出格式化. . 667.1.1旧式字符串格式化. . . . . . 707.2读和写文件. . . . . . 707.2.1文件对象的方法717.2.2 pickle模块. 74第八章错误和异常758.1语法错误. . . . . . . 758.2异常. . . . . . . . . . 758.3处理异常. . . . . . . 768.4抛出异常. . . . . . . 798.5自定义异常. . . . . . 808.6定义清理动作. . . . . 818.

6、7预定义的清理动作. . 83第九章类839.1关于名称和对象的讨论849.2 Python的作用域和命名空间. . . . . . . . . 849.2.1域和命名空间的例子. . . . . 879.3类的初印象. . . . . . 889.3.1类定义的语法. 889.3.2类对象. . . . . 889.3.3实例对象. . . 909.3.4方法对象. . . 909.4随机备注. . . . . . . 919.5继承. . . . . . . . . . 939.5.1多重继承. . . 949.6私有变量. . . . . . . 959.7杂物. . . . . . .

7、 . . . 969.8异常也是类. . . . . . 969.9迭代器. . . . . . . . . 979.10发生器. . . . . . . . . 999.11生成器表达式. . . . . 100第十章标准库简明介绍10110.1与操作系统的接口. . 10110.2文件的通配符. . . . . 10210.3命令行参数. . . . . . 10210.4错误的重定向输出和程序的终止. . . . . . 102目录310.5字符串模式的区配. . 10310.6数学处理. . . . . . . 10310.7访问互联网. . . . . . 10410.8日期和时间.

8、 . . . . . 10410.9数据的压缩. . . . . . 10510.10性能测试. . . . . . . 10510.11质量控制. . . . . . . 10610.12充电区. . . . . . . . 107第十一章标准库简明介绍(第二部分)10811.1格式化输出. . . . . . 10811.2模板化. . . . . . . . . 10911.3 Working with BinaryData Record Layouts . 11111.4多线程. . . . . . . . . 11111.5日志. . . . . . . . . . 11311.6弱

9、引用. . . . . . . . . 11311.7处理列表的工具. . . . 11411.8十进制浮点数的运算. 116第十二章现在干什么?117第十三章交互式输入编辑及历史替代11913.1行编辑. . . . . . . . . 11913.2历史替代. . . . . . . 11913.3按键绑定. . . . . . . 12013.4交互式解释器的替代品122第十四章浮点算数:问题和限制12214.1表示错误. . . . . . . 127A使用Sphinx输出包含中文支持的LATEX源文件131第一章开胃菜4Python是种易学而强大的编程语言.它包含了高效的高级数据结构

10、,能够用简单而高效的方式进行面向对象编程. Python优雅的语法和动态类型,以及它天然的解释能力,使其成为了大多数平台上能广泛适用于各领域的理想脚本语言和开发环境.Python解释器及其扩展标准库的源码和编译版本可以从Python的Web站点http:/www.python.org及其所有镜像站点上获得,并且可以自由发布.该站点上也提供了Python的一些第三方模块,程序,工具以及附加的文档.Python的解释器可以很容易的通过C或者C+ (或者其它可以通过C调用的语言)扩展新的函式和数据类型. Python也可以作为定制应用的扩展语言.本教程向读者介绍Python语言及其体系的基本知识与概

11、念.配合Python解释器学习会很有帮助,因为文中己包含所有的完整例子,所以这本手册也可以离线阅读.需要有关标准对象和模块的详细介绍的话,请参阅库参考手册.而语言手册提供了更多关于语言本身的正式说明.需要编写C或C+扩展,请阅读扩展和嵌入以及对C接口.这几部分涵盖了Python各领域的深入知识.本教程没有涵盖Python的所有功能,也不准备解释涉及的所有相关知识.相反的,只介绍Python中最引人注目的功能,这对读者掌握这门语言的风格大有帮助.读完后,你应该已能阅读和编写Python模块和程序,接下去就可以从Python库参考手册中进一步学习Python丰富库和模块.术语表也值得仔细阅读.第一

12、章开胃菜1假如你用计算机做许多工作,最终你会发现有些工作你会希望计算机能自动完成.例如:以复杂的方式重命名并整理大量图片.又或想要编写一个小型的定制数据库,又或一个特殊的图形界面程序,甚或一个小型的游1初译:刘鑫精译:DocsPy3zh校对:Zoom.Quiet整理:Liam Huang第一章开胃菜5戏.如果你是名专业的软件开发者,你可能不得不动用很多C/C+/Java库,结果编写/编译/测试/重编译周期越来越长.可能你需要给每个库编写对应的测试代码,但发现这是个烦人的活儿.或者你在编写的程序能使用一种扩展语言,但你又不想整个重新设计和实现一回.这时, Python正是你要的语言.或许你可以写

13、一个Unix shell脚本抑或是Windows批处理文件来完成上述的一些工作,但是脚本语言最擅长的是移动文件和对文本文件进行处理,而在图形界面程序或游戏方面并不擅长.你能写C/C+/Java程序,但是这些技术即使开发最简单的程序也要用去大量的时间.无论在Windows、MacOS X或Unix操作系统上, Python都非常易于使用,可以帮助你更快的完成任务.虽说Python很容易上手,但它毕竟是一门真正的编程语言,相对于Shell脚本或是批处理文件,对大型程序的和数据结构的支持, Python要多的多.另一方面,它提供了比C更多的错误检查,而且,作为一门非常高阶的语言(very-high-

14、level language),它拥有内置高级数据结构类型,例如可变数组和字典.因为Python拥有更多的通用数据类型,因此它相较Awk甚或是Perl,在更广泛的问题领域内有用武之地,而且在许多事情上Python表现的至少不比那些语言复杂。Python允许你把自己的程序分隔成不同的模块,以便在其它的Python程序中重用. Python自带一个很大的标准模块集,你应该把它们作为自己程序的基础或者把它们做为开始学习Python时的编程实例.其中一些模块中提供了诸如文件I/O,系统调用, sockets甚至类似TK这样的图形接口.Python是一门解释型语言,因为不需要编译和链接的时间,它可以帮你

15、省下一些开发时间.解释器可以交互式的使用,这使你很容易实验用各种语言特征,写可抛弃的程序,或在自下而上的开发期间测试功能.它也是一个随手可得的计算器.Python能让程序紧凑,可读性增强.用Python写的程序通常比同样第一章开胃菜6的C, C+或Java程序要短得多,这是因为以下几个原因:高级数据结构使你可以在单独的语句中也能表述复杂的操作;语句的组织依赖于缩进而不是开始/结束符(类似C族语言的符号或Pascal的begin/end关键字);参数或变量不需要声明.Note:有关Python使用缩进来进行语法结构控制的特性,这是在技术社区中经常引发争论的一点,习惯用标识符的程序猿有诸多怨辞;从

16、译者看来这正是Python最可爱的一点:精确体现出了内置的简单就是美的精神追求:不得写出难以看懂的代码!因为使用了空间上的缩进,所以:超过3层的编辑结构,会导致代码行超出屏幕,难以阅读团队中各自使用不同的缩进方式时,难以阅读其它人的代码超过一屏高度的代码,将难以理解层次关系.那么这也意味着:你忽然开始享受人类最优雅和NB的编辑器了你的所有函式都2于50行,简洁明了你所在的团队有稳定统一的代码规约了,你看任何人的代码都没有反胃的感觉了.Python是可扩展的:如果你会用C写程序,就可以很容易的为解释器添加新的内建函式或模块,或者优化性能瓶颈,使其达到最大速度,或者使Python能够链接到必要的二

17、进制架构(比如某个专用的商业图形库).一旦第二章使用PYTHON解释器7你真正掌握了,你可以将Python集成进由C写成的程序,把Python当做是这个程序的扩展或命令行语言.顺便说一下,这个语言的名字来自于BBC的“Monty Pythons FlyingCircus”节目,和凶猛的爬行类生物没有任何关系.在文档中引用MontyPython的典故不仅可行,而且值得鼓励!现在我们已经了解了Python中所有激动人心的东西,大概你想详细的尝试一下了.的确,学习一门语言最好的办法就是使用它,如你所读到的,教程将邀请你在Python解释环境中进行试练.下一节,将先说明解释器的用法,这没有什么神秘的内

18、容,不过有助于我们练习后面展示的例子.本教程其它部分通过示例介绍了Python语言和系统的各种功能,开始是简单表达式,语法和数据类型,接下来是函式和模块,最后是诸如异常和自定义类这样的高级内容.第二章使用Python解释器22.1调用Python解释器Python解释器通常安装在目标机器的/usr/local/bin/目录下.将/usr/local/bin目录放进你的Unix Shell的搜索路径里,确保它可以通过输入:1 python3.2启动.3因为安装路径是可选的,所以也可能安装在其它位置,具体的你可以咨询当地Python导师或系统管理员. (例如, /usr/local/python就

19、是一个很常见的选择)在Windows机器中, Python通常安装在C:Python32目录.当然,我们可以在运行安装程序的时候改变它.需要把这个目录加入到我们的Path2初译:刘鑫精译:DocsPy3zh校对:Zoom.Quiet整理:Liam Huang3在Unix, Python 3.x解释器默认不使用可执行文件名python安装,所以同时安装Python 2.x并不会发生冲突.第二章使用PYTHON解释器8中的话,可以像下面这样在DOS窗中输入命令行:set path=%path%;C:python32输入一个文件结束符( UNIX上是Control-D , Windows上是Cont

20、rol-Z )解释器会以0值退出.如果没有起作用,你可以输入以下命令退出: quit().解释器的行编辑功能并不复杂,装在UNIX上的解释器可能需要GNUreadline库支持,这样就可以额外得到精巧的交互编辑和历史记录功能.确认命令行编辑器支持能力最方便的方式可能是在主提示符下输入Control-P,如果有嘟嘟声(计算机扬声器),说明你可以使用命令行编辑功能(在交互式输入编辑及历史替代在快捷键的介绍).如果什么也没有发声,或者显示P,说明命令行编辑功能不可用;你将只能用退格键删除当前行的字符.解释器的操作有些像UNIX Shell:使用终端设备作为标准输入来调用它时,解释器交互地解读和执行命

21、令,通过文件名参数或以文件作为标准输入时,它从文件中解读并执行脚本.启动解释器的第二个方法是python -c command arg .,这种方法会执行command中的语句,等同于Shell的-c选项.因为Python语句中通常会包括空格之类的对shell有特殊含义的字符,所以最好把整个command用单引号包起来.有一些Python模块也可以当作脚本使用.它们可以通过python-m modulearg.调用,这如同在命令行中给出其完整文件名来运行一样.使用脚本文件时,经常会运行脚本然后进入交互模式.这也可以通过在脚本之前加上-i参数来实现. (如果脚本来自标准输入,就不能这样执行,与前

22、述提及原因一样. )2.1.1参数传递调用解释器时,脚本名和附加参数传入一个名为sys.argv的字符串列表.第二章使用PYTHON解释器9没有给定脚本和参数时,它至少有一个元素: sys.argv0,此时它是一个空字符串,脚本名指定为- (表示标准输入)时, sys.argv0被设为-.使用-c命令时, sys.argv0被设定为-c.使用-m模块时, sys.argv0被设定为模块的全名. -c command或-m module之后的参数不会被Python解释器的选项处理机制所截获,而是留在sys.argv中,供命令或模块操作.2.1.2交互模式从tty读取命令时,我们称解释器工作于交互

23、模式(interactive mode).这种模式下它通过主提示符(primary prompt)提示下一条命令,主提示符通常为三个大于号();而通过从提示符由(三个点标识.组成)提示一条命令的续行.在第一条命令之前,解释器会打印欢迎信息,版本号和授权提示:$ python3.2Python 3.2 (py3k, Sep 12 2011, 12:21:02)GCC 3.4.6 20060404 (Red Hat 3.4.6-8) on linux2Type “help“, “copyright“, “credits“ or “license“ for moreinformation.输入多行结

24、构时就需要从属提示符了,例如,下面这个if语句:1 the_world_is_flat = 12 if the_world_is_flat:3 . print(“Becarefulnottofalloff!“)4 .5 Be careful not to fall off!第二章使用PYTHON解释器102.2解释器及其环境2.2.1错误处理有错误发生时,解释器会输出错误信息和栈跟踪.交互模式下,它返回到主提示符,如果从文件输入执行,它在打印栈跟踪后以非零状态退出. (在try语句中抛出并被except从句处理的异常不是这里所讲的错误).一些非常致命的错误会导致非零状态下退出,这通常由内部问题

25、或内存溢出造成,所有的错误信息都写入标准错误流;命令中执行的普通输出写入标准输出.在主提示符或从属提示符后输入中断符(通常是Control-C或者DEL)就会取消当前输入,回到主提示符.4执行命令时输入一个中断符会抛出一个KeyboardInterrupt异常,它可以被try语句截获.2.2.2可执行的Python脚本类BSD的UNIX系统中, Python脚本可以像Shell脚本那样直接执行,只要在脚本文件开头加一行文本来声明模式:1 #! /usr/bin/env python3.2(要先确认Python解释器存在于用户的PATH环境变量中). #!这两个字符必须是文件的头两个字符.在某些

26、平台上,第一行必须以UNIX风格的行结束符(n)结束,不能用Windows (rn)的行结束符.注意, #用于Python一行注释的开始.脚本可以用chmod命令指定可执行模式或权限:$ chmod +x myscript.py在Windows系统下,没有“可持行模式(executable mode)”的概念.Python安装器会自动地把.py后缀的文件与python.exe绑定,因此双击一个Python文件,就可以把它作为脚本来运行.扩展名也可以是.pyw,这时工作台窗口会隐藏不被打开.4一个GNU Readline包的问题可能会禁止这个功能.第二章使用PYTHON解释器112.2.3源程序

27、编码默认情况下, Python源码文件以UTF-8编码.在这种编码下,世界上大多数语言的字符都可以用于,字符串常量,标识符,以及注释尽管标准库遵循一个所有可移植代码都应遵守的约定:仅使用ASCII字符作为标识符.要正确地显示所有这些字符,你的编辑器一定要有能力辨认出是UTF-8编码,还要使用一个支持所有文件中字符的字体.也可以为源码文件指定不同的编码.为此,要在#!行后面指定一个特殊的注释行,以定义源码文件的编码:1 # -*- coding: encoding -*-有了这样的声明,源文件中的所有字符都会被以encoding的编码来解读,而非是UTF-8.在Python库参考的codecs一

28、节可以找到所有可用的编码.例如,如果你使用的编辑器不支持UTF-8编码,但是支持另一种称为Windows-1252的编码,你可以在源码中写上:1 # -*- coding: cp-1252 -*-这样就可以在源码文件中使用Windows-1252字符集.这个特殊的编码注释必须在代码文件的第一或第二行.2.2.4交互式启动文件交互式地使用Python解释器时,我们可能需要在每次启动时执行一些命令.为了做到这点,你可以设置一个名为PYTHONSTARTUP的变量,指向包含启动命令的文件.这类似于Unix Shell的.profile文件.这个文件只在交互式会话中才被读取,当Python从脚本中读取

29、命令或显式地以/dev/tty作为命令源时(尽管它的行为很像是处在交互会话期)则不会如此.它与解释器执行的命令处在同一个命名空间,所以由它定义或引用的一切可以在解释器中不受限制的使用.你也可以在这个文件中改变sys.ps1 and sys.ps2的值.如果你想要在当前目录中执行额外的启动文件,可以在全局启动文件第三章非正式介绍PYTHON 12中加入类似以下的代码: if os.path.isfile(.pythonrc.py):exec(open(.pythonrc.py).read().如果你想要在某个脚本中使用启动文件,必须要在脚本中写入这样的语句:1 import os2 filena

30、me = os.environ.get(PYTHONSTARTUP)3 if filename and os.path.isfile(filename):4 exec(open(filename).read()2.2.5定制模块Python为你提供两个钩子(hook)来定制交互环境: sitecustomize和usercustomize.要知道它如何工作,你需要先找到你的user site-package目录的位置.打开Python并运行这段代码:1 import site2 site.getusersitepackages()3 /home/user/.local/lib/python3.

31、2/site-packages现在你可以在那个目录下创建一个名为usercustomize.py的文件,并在里面放置任何你想放的东西.它将影响到每一次Python的调用,除非使用了-s选项来禁用了自动导入功能.sitecustomize以同样的方式工作,但通常由该计算机的管理员在全局site-packages目录下创建,并且在usercustomize之前被导入.参看site模块的文档获取更多细节.第三章非正式介绍Python5在以下的例子中,输入和输出通过提示符(和.)来区分:要运行示例,你必须在提示符出现后键入提示符后面的所有内容;不以提示符开头的行是解释器的输出.5初译:刘鑫精译:Doc

32、sPy3zh校对:Zoom.Quiet整理:Liam Huang第三章非正式介绍PYTHON 13注意,在例子中有以一个次提示符独占一行时意味着你必须加入一个空行;用来表示多行命令的结束.这里有许多例子,都是在交互式的提示符后中输入,包括注释. Python中的注释以一个井号, #开头,一直延伸到该物理行的最后.注释既可以出现在一行的开头,也可以跟着空白或代码后面,但不能在字符串里面.在字符串里面的井号只是一个井号字符.因为注释使用来使代码清晰的,而不会被Python解释,所以在键入例子是可以省略它们.例如:1 #这是第一个注释2 SPAM = 1 #这是第二个注释3 # .而现在是第三个!4

33、 STRING = “#这不是注释.“3.1把Python当计算器使用让我们尝试一些简单的Python命令.打开解释器,等待主提示符, ,出现. (这不会很久)3.1.1数值解释器可作为简单的计算器:输入表达式给它,它将输出表达式的值.表达式语法很直白:操作符+, -, *, /就像大多数语言一样工作(例如, Pasal和C);圆括号用以分组.例如:1 2+22 43 #这是注释4 . 2+25 46 2+2 #代码同一行的注释7 48 (50-5*6)/49 5.010 8/5 #整数相除时并不会丢失小数部分11 1.6第三章非正式介绍PYTHON 14注意:在你那儿,可能结果并不完全相同;

34、因为不同机器上的浮点数结果可能不同,待会我们会讲如何控制浮点数输出地显示.具体参见浮点算术:问题和限制中关于浮点数的细节和表示法的完整讨论.要从整数相除中得到一个整数,丢弃任何小数部分,可以使用另一个操作符, /:1 #整数相除返回地板数:2 . 7/33 24 7/-35 -3等号(=)用于把一个值分配给一个变量.其后不会输出任何结果,而是下一个交互提示符:1 width = 202 height = 5*93 width * height4 900一个值可以同时被赋给多个变量:1 x = y = z = 0 #给x, y和z赋值02 x3 04 y5 06 z7 0变量在使用之前必须要被“

35、定义”(分配一个值),否则会产生一个错误:1 #尝试访问未定义的变量2 . n3 Traceback (most recent call last):4 File “, line 1, in 5 NameError: name n is not definedPython完全支持浮点数;在混合计算时, Pyhton会把整型转换成为浮点数:第三章非正式介绍PYTHON 151 3 * 3.75 / 1.52 7.53 7.0 / 24 3.5复数也有支持;虚数部分写得时候要加上后缀, j或i.实部非零的复数被写作(real+imagj),也可以通过函式complex(real,imag)生成.复

36、数总是表达为两个浮点数,实部和虚部.要从复数z中抽取这些部分,使用z.real和z.imag1 a=1.5+0.5j2 a.real3 1.54 a.imag5 0.5浮点数和整数的转换函式(float(), int()不能用于复数没有正确的方法能把一个复数转换为一个实数.使用abs(z)得到它的模(以一个浮点数),使用z.real得到他的实部:1 a=3.0+4.0j2 float(a)3 Traceback (most recent call last):4 File “, line 1, in ?5 TypeError: cantconvertcomplextofloat;useabs(

37、z)6 a.real7 3.08 a.imag9 4.010 abs(a)#sqrt(a.real*2+a.imag*2)11 5.0在交互模式下,最后一个表达式的值被分配给变量_.这意味着当你把Python用作桌面计算器时,可以方便的进行连续计算,例如:1 tax = 12.5 / 1002 price = 100.503 price * tax4 12.5625第三章非正式介绍PYTHON 165 price + _6 113.06257 round(_, 2)8 113.06我们应该将这这个变量视作只读的.不要试图给它赋值否则你会创建一个同名的局部变量,而隐藏原本内置变量的魔术效果.3.

38、1.2字符串除了数字, Python也可以通过几种不同的方式来操作字符串.字符串是用单引号或双引号包裹起来的:1 spameggs2 spameggs3 doesnt4 “doesnt“5 “doesnt“6 “doesnt“7 “Yes,“hesaid.8 “Yes,“hesaid.9 “Yes,“hesaid.“10 “Yes,“hesaid.11 “Isnt,“shesaid.12 “Isnt,“shesaid.解释器以字符串键入时相同的方式打印它们:在引号里面,使用引号或其它使用反斜杠的转义字符以说明精确的值.当字符串包含单引号而没有双引号时,就使用双引号包围它,否则,使用单引号. p

39、rint()函数为如此的字符串提供了一个更可读的输出.字符串有几种方法来跨越多行.继续行可以被使用,在一行最后加上一个反斜杠以表明下一行是这行的逻辑延续:1 hello = “这是一个相当长的字符串包含n2几行文本,就像你在C里做的一样.n3 注意开通的空白是4 有意义的.“56 print(hello)第三章非正式介绍PYTHON 17注意,换行依旧需要在字符串里嵌入n在后面的反斜杠后面的换行被丢弃了.该示例会打印如下内容:1这是一个相当长的字符串包含2几行文本,就像你在C里做的一样.3注意开通的空白是有意义的.另一种方法,字符串可以使用一对匹配的三引号对包围: “或.当使用三引号时,回车不

40、需要被舍弃,他们会包含在字符串里.于是下面的例子使用了一个反斜杠来避免最初不想要的空行.1 print(“2用途: thingy OPTIONS3 -h显示用途信息4 -H hostname连接到的主机名5 “)产生如下输入:1用途: thingy OPTIONS2 -h显示用途信息3 -H hostname连接到的主机名如果我们把字符串变为一个“未处理”字符串, n序列不会转义成回车,但是行末的反斜杠,以及源中的回车符,都会当成数据包含在字符串里.因此,这个例子:1 hello = “这是一个相当长的字符串包含n2几行文本,就像你在C里做的一样.“34 print(hello)将会打印:1这

41、是一个相当长的字符串包含n2几行文本,就像你在C里做的一样.字符串可以使用+操作符来连接(粘在一起),使用*操作符重复:1 word = Help + A2 word第三章非正式介绍PYTHON 183 HelpA4 5 两个靠着一起的字符串会自动的连接;上面例子的第一行也可以写成word= HelpA;这只能用于两个字符串常量,而不能用于任意字符串表达式:1 str ing # str.strip() + ing # str.strip() ing # “, line 1, in ?7 str.strip() ing8 9 SyntaxError: invalid syntax字符串可以使用

42、下标(索引);就像C一样,字符串的第一个字符的下标(索引)为0.没有独立的字符串类型;一个字符串就是一个大小为一的字符串.就像Icon程序语言一样,子字符串可以通过切片符号指定:冒号分隔的两个索引.1 word42 A3 word0:24 He5 word2:46 lp切片索引有一些有用的默认值;省略的第一个索引默认为零,省略的第二个索引默认为字符串的大小.1 word:2 #头两个字符2 He3 word2: #除了头两个字符4 lpA与C字符串不一样, Python字符串不可以改变.给字符串的索引位置赋值会产生一个错误:第三章非正式介绍PYTHON 191 word0 = x2 Trace

43、back (most recent call last):3 File “, line 1, in ?4 TypeError: str object does not support item assignment5 word:1 = Splat6 Traceback (most recent call last):7 File “, line 1, in ?8 TypeError: str object does not support slice assignment然而,使用内容组合创建新字符串是简单和有效的:1 x + word1:2 xelpA3 Splat + word44 Spl

44、atA这有一个有用的切片操作的恒等式: s:i+ si:等于s.1 word:2 + word2:2 HelpA3 word:3 + word3:4 HelpA退化的切片索引被处理地很优雅:太大的索引会被字符串大小所代替,上界比下界小就返回空字符串.1 word1:1002 elpA3 word10:4 5 word2:16 索引可以是负数,那样就会从右边开始算起.例如:1 word-1 #最后一个字符2 A3 word-2 #倒数第二个字符4 p5 word-2: #最后两个字符6 pA7 word:-2 #除最后两个字符的其他字符第三章非正式介绍PYTHON 208 Hel但是要注意, -

45、0与0是完全一样的,因此它不会从右边开始数!1 word-0 # (因为-0等于0)2 H越界的负切片索引会被截断,当不要对单元素(非切片)索引使用越界索引.1 word-100:2 HelpA3 word-10 #错误4 Traceback (most recent call last):5 File “, line 1, in ?6 IndexError: string index out of range记忆切片工作方式的一个方法是把索引看作是字符之间的点,第一字符的左边记作0.包含n个字符的字符串最后一个字符的右边的索引就是n,例如:1 +-+-+-+-+-+2 | H | e | l

46、 | p | A |3 +-+-+-+-+-+4 0 1 2 3 4 55 -5 -4 -3 -2 -1第一行给出了索引0.5在字符串里的位置;第二行给出了相应的负索引. i到j的切片由标号为i和j的边缘中间的字符所构成.对于没有越界非负索引,切片的长度就是两个索引之差.例如, word1:3的长度是2.内建函数len()返回字符串的长度:1 s = supercalifragilisticexpialidocious2 len(s)3 34第三章非正式介绍PYTHON 21.See more:Sequence Typesstr, bytes, bytearray, list, tuple,

47、range字符串是*序列类型*的例子,支持该类型的一般操作.String Methods字符串支持大量用与基本变换和搜索的方法.String Formatting在这描述了使用str.format()格式字符串的信息.Old String Formatting Operations当字符串和Unicode字符串为%操作符的左操作数时,老的格式操作就会被调用,在这里描述了更多细节.3.1.3关于Unicode自Python 3.0开始,所有字符串都支持Unicode (参见http:/www.unicode.org/). Unicode的益处在于它为自古至今所有文本中使用的每个字符提供了一个序号

48、.在以前,只有256个序号表示文字字符.一般地,文本被一个映射序号到文本字符的编码页所限制.尤其在软件的国际化(internationalization,通常被写作i18ni + 18个字符+ n)时尤其混乱. Unicode通过为所有文本定义一个编码页解决了这些难题.如果你想在字符串里加入特殊字符,可以使用Unicode-Escape编码.下面的例子说明了如何做到这点:1 Hellou0020World!2 HelloWorld!转义序列u0020表明在给出的位置,使用序号值0x0020 (空格字符),插入这个Unicode字符.其它字符通过直接地使用它们各自的序号值作为Unicode序号而被解释.如果你有使用标准Latin-1编码,在很多西方国家里使用,的字符串,你会方便地发现Unicode的前256个字符与Latin-1的一样.第三章非正式介绍PYTHON 22除这些标准编码以外, Python还提供了整套其它方法,通过一个已知编码的基础来创建Unicode字符串.字符串对象提供了一个encode()方法,用于使用一个特殊编码转换字符串到字节序列,该方法带有一个参数,编码的名字.优先选择编码的小写名字.1 “pfel“.encode(utf-8)2

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

当前位置:首页 > 实用文档 > 产品手册

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


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

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

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