首页 python3.6.0入门指导(官方版)

python3.6.0入门指导(官方版)

举报
开通vip

python3.6.0入门指导(官方版)Python入门指南入门指南¶Release:3.6.0Date:Feb18,2017Python是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程。Python优雅的语法和动态类型,再结合它的解释性,使其在大多数平台的许多领域成为编写脚本或开发应用程序的理想语言。你可以自由地从Python官方点:http://www.python.org,以源代码或二进制形式获取Python解释器及其标准扩展库,并可以自由的分发。此站点同时也提供了大量的第三方Py...

python3.6.0入门指导(官方版)
Python入门指南入门指南¶Release:3.6.0Date:Feb18,2017Python是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程。Python优雅的语法和动态类型,再结合它的解释性,使其在大多数平台的许多领域成为编写脚本或开发应用程序的理想语言。你可以自由地从Python官方点:http://www.python.org,以源代码或二进制形式获取Python解释器及其 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 扩展库,并可以自由的分发。此站点同时也提供了大量的第三方Python模块、程序和工具,及其附加文档。你可以很容易的使用C或C++(其他可以通过C调用的语言)为Python解释器扩展新函数和数据类型。Python还可以被用作定制应用程序的一门扩展语言。本手册非正式的向读者介绍了Python语言及其体系相关的基本知识与概念。在学习实践中结合使用Python解释器是很有帮助的,不过所有的例子都是完整的,所以本手册亦可离线阅读。如果需要了解相关标准库或对象的详细介绍,请查阅Python参考文档。Python参考手册提供了更多语言相关的正式 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 。如果想要使用C或C++编写扩展,请查阅Python解释器扩展和集成章节和CAPI参考手册。当然也可阅读一些深入介绍Python知识的图书。本手册不会尝试涵盖Python的全部知识和每个特性,甚至不会涵盖所有常用的特性。相反地,它介绍了Python中许多最引人瞩目的特性,并且会给你一个关于语言特色和风格的认识。读完之后,你将能够阅读和编写Python模块或程序,并为以后使用Python参考手册继续学习诸多Python模块库做好准备。词汇表也值得浏览一下。1.开胃菜2.使用Python解释器2.1.调用Python解释器2.1.1.参数传递2.1.2.交互模式2.2.解释器及其环境2.2.1.源程序编码3.Python简介3.1.将Python当做计算器3.1.1.数字3.1.2.字符串3.1.3.列表3.2.编程的第一步4.深入Python流程控制4.1.if语句4.2.for语句4.3.range()函数4.4.break和continue语句,以及循环中的else子句4.5.pass语句4.6.定义函数4.7.深入Python函数定义4.7.1.默认参数值4.7.2.关键字参数4.7.3.可变参数列表4.7.4.参数列表的分拆4.7.5.Lambda形式4.7.6.文档字符串4.7.7.函数注解4.8.插曲:编码风格5.数据结构5.1.关于列表更多的内容5.1.1.把列表当作堆栈使用5.1.2.把列表当作队列使用5.1.3.列表推导式5.1.4.嵌套的列表推导式5.2.del语句5.3.元组和序列5.4.集合5.5.字典5.6.循环技巧5.7.深入条件控制5.8.比较序列和其它类型6.模块6.1.深入模块6.1.1.作为脚本来执行模块6.1.2.模块的搜索路径6.1.3.“编译的”Python文件6.2.标准模块6.3.dir()函数6.4.包6.4.1.从*导入包6.4.2.包内引用6.4.3.多重目录中的包7.输入和输出7.1.格式化输出7.1.1.旧式的字符串格式化7.2.文件读写7.2.1.文件对象方法7.2.2.使用json存储结构化数据8.错误和异常8.1.语法错误8.2.异常8.3.异常处理8.4.抛出异常8.5.用户自定义异常8.6.定义清理行为8.7.预定义清理行为9.类9.1.术语相关9.2.Python作用域和命名空间9.2.1.作用域和命名空间示例9.3.初识类9.3.1.类定义语法9.3.2.类对象9.3.3.实例对象9.3.4.方法对象9.3.5.类和实例变量9.4.一些说明9.5.继承9.5.1.多继承9.6.私有变量9.7.补充9.8.异常也是类9.9.迭代器9.10.生成器9.11.生成器表达式10.Python标准库概览10.1.操作系统接口10.2.文件通配符10.3.命令行参数10.4.错误输出重定向和程序终止10.5.字符串正则匹配10.6.数学10.7.互联网访问10.8.日期和时间10.9.数据压缩10.10.性能度量10.11.质量控制10.12.“瑞士军刀”11.标准库浏览–PartII11.1.输出格式11.2. 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 11.3.使用二进制数据 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 布局11.4.多线程11.5.日志11.6.弱引用11.7.列表工具11.8.十进制浮点数算法12.虚拟环境和包12.1.简介12.2.创建虚拟环境12.3.使用pip管理包13.接下来?14.交互式输入行编辑历史回溯14.1.Tab补全和历史记录14.2.其它交互式解释器15.浮点数算法:争议和限制15.1.表达错误16.附录16.1.交互模式16.1.1.错误处理16.1.2.可执行Python脚本16.1.3.交互式启动文件16.1.4.定制模块1.开胃菜开胃菜¶如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理。比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理。也许你想要编写一个小型的自定义数据库、一个特殊的GUI应用程序或一个简单的小游戏。如果你是一名专业的软件开发者,可能你必须使用几种C/C++/JAVA类库,并且发现通常编写/编译/测试/重新编译的周期是如此漫长。也许你正在为这些类库编写测试用例,但是发现这是一个让人烦躁的工作。又或者你已经完成了一个可以使用扩展语言的程序,但你并不想为此重新 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 并实现一套全新的语言。那么Python正是你所需要的语言。虽然你能够通过编写Unixshell脚本或Windows批处理文件来处理其中的某些任务,但Shell脚本更适合移动文件或修改文本数据,并不适合编写GUI应用程序或游戏;虽然你能够使用C/C++/JAVA编写程序,但即使编写一个简单的first-draft程序也有可能耗费大量的开发时间。相比之下,Python更易于使用,无论在Windows、MacOSX或Unix操作系统上它都会帮助你更快地完成任务。虽然Python易于使用,但它却是一门完整的编程语言;与Shell脚本或批处理文件相比,它为编写大型程序提供了更多的结构和支持。另一方面,Python提供了比C更多的错误检查,并且作为一门高级语言,它内置支持高级的数据结构类型,例如:灵活的数组和字典。因其更多的通用数据类型,Python比Awk甚至Perl都适用于更多问题领域,至少大多数事情在Python中与其他语言同样简单。Python允许你将程序分割为不同的模块,以便在其他的Python程序中重用。Python内置提供了大量的标准模块,你可以将其用作程序的基础,或者作为学习Python编程的示例。这些模块提供了诸如文件I/O、系统调用、Socket支持,甚至类似Tk的用户图形界面(GUI)工具包接口。Python是一门解释型语言,因为无需编译和链接,你可以在程序开发中节省宝贵的时间。Python解释器可以交互的使用,这使得试验语言的特性、编写临时程序或在自底向上的程序开发中测试方法非常容易。你甚至还可以把它当做一个桌面计算器。Python让程序编写的紧凑和可读。用Python编写的程序通常比同样的C、C++或Java程序更短小,这是因为以下几个原因:*高级数据结构使你可以在一条语句中表达复杂的操作;*语句组使用缩进代替开始和结束大括号来组织;*变量或参数无需声明。Python是可扩展的:如果你会C语言编程便可以轻易地为解释器添加内置函数或模块,或者为了对性能瓶颈作优化,或者将Python程序与只有二进制形式的库(比如某个专业的商业图形库)连接起来。一旦你真正掌握了它,你可以将Python解释器集成进某个C应用程序,并把它当作那个程序的扩展或命令行语言。顺便说一句,这个语言的名字来自于BBC的“MontyPython’sFlyingCirecus”节目,和爬行类动物没有任何关系。在文档中引用MontyPython的典故不仅可行,而且值得鼓励!现在你已经为Python兴奋不已了吧,大概想要领略一些更多的细节!学习一门语言最好的方法就是使用它,本指南推荐你边读边使用Python解释器练习。下一节中,我们将解释Python解释器的用法。这是很简单的一件事情,但它有助于试验后面的例子。本手册剩下的部分将通过示例介绍Python语言及系统的诸多特性,开始是简单的语法、数据类型和表达式,接着介绍函数与模块,最后涉及异常和自定义类这样的高级内容。2.使用使用Python解释器解释器¶2.1.调用调用Python解释器解释器¶Python解释器通常被安装在目标机器的/usr/local/bin/python3.5目录下。将/usr/local/bin目录包含进Unixshell的搜索路径里,以确保可以通过输入:python3.5命令来启动他。[1]由于Python解释器的安装路径是可选的,这也可能是其它路径,你可以联系安装Python的用户或系统管理员确认(例如,/usr/local/python就是一个常见的选择)。在Windows机器上,Python通常安装在C:\Python35位置,当然你可以在运行安装向导时修改此值。要想把此目录添加到你的PATH环境变量中,你可以在DOS窗口中输入以下命令:setpath=%path%;C:\python35通常你可以在主窗口输入一个文件结束符(Unix系统是Control-D,Windows系统是Control-Z)让解释器以0状态码退出。如果那没有作用,你可以通过输入quit()命令退出解释器。Python解释器具有简单的行编辑功能。在Unix系统上,任何Python解释器都可能已经添加了GNUreadline库支持,这样就具备了精巧的交互编辑和历史记录等功能。在Python主窗口中输入Control-P可能是检查是否支持命令行编辑的最简单的方法。如果发出嘟嘟声(计算机扬声器),则说明你可以使用命令行编辑功能;更多快捷键的介绍请参考交互式输入行编辑历史回溯。如果没有任何声音,或者显示^P字符,则说明命令行编辑功能不可用;你只能通过退格键从当前行删除已键入的字符并重新输入。Python解释器有些操作类似Unixshell:当使用终端设备(tty)作为标准输入调用时,它交互的解释并执行命令;当使用文件名参数或以文件作为标准输入调用时,它读取文件并将文件作为脚本执行。第二种启动Python解释器的方法是python-ccommand[arg]...,这种方法可以在命令行执行Python语句,类似于shell中的-c选项。由于Python语句通常会包含空格或其他特殊shell字符,一般建议将命令用单引号包裹起来。有一些Python模块也可以当作脚本使用。你可以使用python-mmodule[arg]...命令调用它们,这类似在命令行中键入完整的路径名执行模块源文件一样。使用脚本文件时,经常会运行脚本然后进入交互模式。这也可以通过在脚本之前加上-i参数来实现。2.1.1.参数传递参数传递¶调用解释器时,脚本名和附加参数传入一个名为sys.argv的字符串列表。你能够获取这个列表通过执行importsys,列表的长度大于等于1;没有给定脚本和参数时,它至少也有一个元素:sys.argv[0]此时为空字符串。脚本名指定为'-'(表示标准输入)时,sys.argv[0]被设定为'-',使用-c指令时,sys.argv[0]被设定为'-c'。使用-m模块参数时,sys.argv[0]被设定为指定模块的全名。-c指令或者-m模块之后的参数不会被Python解释器的选项处理机制所截获,而是留在sys.argv中,供脚本命令操作。2.1.2.交互模式交互模式¶从tty读取命令时,我们称解释器工作于交互模式。这种模式下它根据主提示符来执行,主提示符通常标识为三个大于号(>>>);继续的部分被称为从属提示符,由三个点标识(...)。在第一行之前,解释器打印欢迎信息、版本号和授权提示:$python3.5Python3.5.2(default,Mar162014,09:25:04)[GCC4.8.2]onlinuxType"help","copyright","credits"or"license"formoreinformation.>>>输入多行结构时需要从属提示符了,例如,下面这个if语句:>>>the_world_is_flat=1>>>ifthe_world_is_flat:...print("Becarefulnottofalloff!")...Becarefulnottofalloff!关于交互模式更多的内容,请参见交互模式。2.2.解释器及其环境解释器及其环境¶2.2.1.源程序编码源程序编码¶默认情况下,Python源文件是UTF-8编码。在此编码下,全世界大多数语言的字符可以同时用在字符串、标识符和注释中—尽管Python标准库仅使用ASCII字符做为标识符,这只是任何可移植代码应该遵守的约定。如果要正确的显示所有的字符,你的编辑器必须能识别出文件是UTF-8编码,并且它使用的字体能支持文件中所有的字符。你也可以为源文件指定不同的字符编码。为此,在#!行(首行)后插入至少一行特殊的注释行来定义源文件的编码:#-*-coding:encoding-*-通过此声明,源文件中所有的东西都会被当做用encoding指代的UTF-8编码对待。在Python库参考手册codecs一节中你可以找到一张可用的编码列表。例如,如果你的编辑器不支持UTF-8编码的文件,但支持像Windows-1252的其他一些编码,你可以定义:#-*-coding:cp-1252-*-这样就可以在源文件中使用Windows-1252字符集中的所有字符了。这个特殊的编码注释必须在文件中的第一或第二行定义。Footnotes[1]在Unix系统上,Python3.X解释器默认未被安装成名为python的命令,所以它不会与同时安装在系统中的Python2.x命令冲突。3.Python简介简介¶下面的例子中,输入和输出分别由大于号和句号提示符(>>>和...)标注:如果想重现这些例子,就要在解释器的提示符后,输入(提示符后面的)那些不包含提示符的代码行。需要注意的是在练习中遇到的从属提示符表示你需要在最后多输入一个空行,解释器才能知道这是一个多行命令的结束。本手册中的很多示例——包括那些带有交互提示符的——都含有注释。Python中的注释以#字符起始,直至实际的行尾(译注——这里原作者用了physicalline以表示实际的换行而非编辑器的自动换行)。注释可以从行首开始,也可以在空白或代码之后,但是不出现在字符串中。文本字符串中的#字符仅仅表示#。代码中的注释不会被Python解释,录入示例的时候可以忽略它们。如下示例:#thisisthefirstcommentspam=1#andthisisthesecondcomment#...andnowathird!text="#Thisisnotacommentbecauseit'sinsidequotes."3.1.将将Python当做计算器当做计算器¶我们来尝试一些简单的Python命令。启动解释器然后等待主提示符>>>出现(不需要很久)。3.1.1.数字数字¶解释器表现得就像一个简单的计算器:可以向其录入一些表达式,它会给出返回值。表达式语法很直白:运算符+,-,*和/与其它语言一样(例如:Pascal或C);括号(())用于分组。例如:>>>2+24>>>50-5*620>>>(50-5*6)/45.0>>>8/5#divisionalwaysreturnsafloatingpointnumber1.6整数(例如,2,4,20)的类型是int,带有小数部分的数字(例如,5.0,1.6)的类型是float。在本教程的后面我们会看到更多关于数字类型的内容。除法(/)永远返回一个浮点数。如要使用floor除法并且得到整数结果(丢掉任何小数部分),你可以使用//运算符;要计算余数你可以使用%>>>17/3#classicdivisionreturnsafloat5.666666666666667>>>>>>17//3#floordivisiondiscardsthefractionalpart5>>>17%3#the%operatorreturnstheremainderofthedivision2>>>5*3+2#result*divisor+remainder17通过Python,还可以使用**运算符计算幂乘方[1]:>>>5**2#5squared25>>>2**7#2tothepowerof7128等号('=')用于给变量赋值。赋值之后,在下一个提示符之前不会有任何结果显示:>>>width=20>>>height=5*9>>>width*height900变量在使用前必须“定义”(赋值),否则会出错:>>>#trytoaccessanundefinedvariable...nTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>NameError:name'n'isnotdefined浮点数有完整的支持;整数和浮点数的混合计算中,整数会被转换为浮点数:>>>3*3.75/1.57.5>>>7.0/23.5交互模式中,最近一个表达式的值赋给变量_。这样我们就可以把它当作一个桌面计算器,很方便的用于连续计算,例如:>>>tax=12.5/100>>>price=100.50>>>price*tax12.5625>>>price+_113.0625>>>round(_,2)113.06此变量对于用户是只读的。不要尝试给它赋值——你只会创建一个独立的同名局部变量,它屏蔽了系统内置变量的魔术效果。除了int和float,Python还支持其它数字类型,例如Decimal和Fraction。Python还内建支持复数,使用后缀j或J表示虚数部分(例如,3+5j)。3.1.2.字符串字符串¶相比数值,Python也提供了可以通过几种不同方式表示的字符串。它们可以用单引号('...')或双引号("...")标识[2]。\可以用来转义引号:>>>'spameggs'#singlequotes'spameggs'>>>'doesn\'t'#use\'toescapethesinglequote..."doesn't">>>"doesn't"#...orusedoublequotesinstead"doesn't">>>'"Yes,"hesaid.''"Yes,"hesaid.'>>>"\"Yes,\"hesaid."'"Yes,"hesaid.'>>>'"Isn\'t,"shesaid.''"Isn\'t,"shesaid.'在交互式解释器中,输出的字符串会用引号引起来,特殊字符会用反斜杠转义。虽然可能和输入看上去不太一样,但是两个字符串是相等的。如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号引用。print()函数生成可读性更好的输出,它会省去引号并且打印出转义后的特殊字符:>>>'"Isn\'t,"shesaid.''"Isn\'t,"shesaid.'>>>print('"Isn\'t,"shesaid.')"Isn't,"shesaid.>>>s='Firstline.\nSecondline.'#\nmeansnewline>>>s#withoutprint(),\nisincludedintheoutput'Firstline.\nSecondline.'>>>print(s)#withprint(),\nproducesanewlineFirstline.Secondline.如果你前面带有\的字符被当作特殊字符,你可以使用原始字符串,方法是在第一个引号前面加上一个r:>>>print('C:\some\name')#here\nmeansnewline!C:\someame>>>print(r'C:\some\name')#notetherbeforethequoteC:\some\name字符串文本能够分成多行。一种方法是使用三引号:"""..."""或者'''...'''。行尾换行符会被自动包含到字符串中,但是可以在行尾加上\来避免这个行为。下面的示例:可以使用反斜杠为行结尾的连续字符串,它表示下一行在逻辑上是本行的后续内容:print("""\Usage:thingy[OPTIONS]-hDisplaythisusagemessage-HhostnameHostnametoconnectto""")将生成以下输出(注意,没有开始的第一行):Usage:thingy[OPTIONS]-hDisplaythisusagemessage-HhostnameHostnametoconnectto字符串可以由+操作符连接(粘到一起),可以由*表示重复:>>>#3times'un',followedby'ium'>>>3*'un'+'ium''unununium'相邻的两个字符串文本自动连接在一起。:>>>'Py''thon''Python'它只用于两个字符串文本,不能用于字符串表达式:>>>prefix='Py'>>>prefix'thon'#can'tconcatenateavariableandastringliteral...SyntaxError:invalidsyntax>>>('un'*3)'ium'...SyntaxError:invalidsyntax如果你想连接多个变量或者连接一个变量和一个字符串文本,使用+:>>>prefix+'thon''Python'这个功能在你想切分很长的字符串的时候特别有用:>>>text=('Putseveralstringswithinparentheses''tohavethemjoinedtogether.')>>>text'Putseveralstringswithinparenthesestohavethemjoinedtogether.'字符串也可以被截取(检索)。类似于C,字符串的第一个字符索引为0。Python没有单独的字符类型;一个字符就是一个简单的长度为1的字符串。:>>>word='Python'>>>word[0]#characterinposition0'P'>>>word[5]#characterinposition5'n'索引也可以是负数,这将导致从右边开始计算。例如:>>>word[-1]#lastcharacter'n'>>>word[-2]#second-lastcharacter'o'>>>word[-6]'P'请注意-0实际上就是0,所以它不会导致从右边开始计算。除了索引,还支持切片。索引用于获得单个字符,切片让你获得一个子字符串:>>>word[0:2]#charactersfromposition0(included)to2(excluded)'Py'>>>word[2:5]#charactersfromposition2(included)to5(excluded)'tho'注意,包含起始的字符,不包含末尾的字符。这使得s[:i]+s[i:]永远等于s:>>>word[:2]+word[2:]'Python'>>>word[:4]+word[4:]'Python'切片的索引有非常有用的默认值;省略的第一个索引默认为零,省略的第二个索引默认为切片的字符串的大小。:>>>word[:2]#characterfromthebeginningtoposition2(excluded)'Py'>>>word[4:]#charactersfromposition4(included)totheend'on'>>>word[-2:]#charactersfromthesecond-last(included)totheend'on'有个办法可以很容易地记住切片的工作方式:切片时的索引是在两个字符之间。左边第一个字符的索引为0,而长度为n的字符串其最后一个字符的右界索引为n。例如:+---+---+---+---+---+---+|P|y|t|h|o|n|+---+---+---+---+---+---+0123456-6-5-4-3-2-1文本中的第一行数字给出字符串中的索引点0...6。第二行给出相应的负索引。切片是从i到j两个数值标示的边界之间的所有字符。对于非负索引,如果上下都在边界内,切片长度就是两个索引之差。例如,word[1:3]是2。试图使用太大的索引会导致错误:>>>word[42]#thewordonlyhas6charactersTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>IndexError:stringindexoutofrangePython能够优雅地处理那些没有意义的切片索引:一个过大的索引值(即下标值大于字符串实际长度)将被字符串实际长度所代替,当上边界比下边界大时(即切片左值大于右值)就返回空字符串:>>>word[4:42]'on'>>>word[42:]''Python字符串不可以被更改—它们是不可变的。因此,赋值给字符串索引的位置会导致错误:>>>word[0]='J'...TypeError:'str'objectdoesnotsupportitemassignment>>>word[2:]='py'...TypeError:'str'objectdoesnotsupportitemassignment如果你需要一个不同的字符串,你应该创建一个新的:>>>'J'+word[1:]'Jython'>>>word[:2]+'py''Pypy'内置函数len()返回字符串长度:>>>s='supercalifragilisticexpialidocious'>>>len(s)34SeealsoTextSequenceType—str字符串是序列类型序列类型的例子,它们支持这种类型共同的操作。StringMethods字符串和Unicode字符串都支持大量的方法用于基本的转换和查找。StringFormatting这里描述了使用str.format()进行字符串格式化的信息。StringFormattingOperations这里描述了旧式的字符串格式化操作,它们在字符串和Unicode字符串是%操作符的左操作数时调用。3.1.3.列表列表¶Python有几个复合数据类型,用于表示其它的值。最通用的是list(列表),它可以写作中括号之间的一列逗号分隔的值。列表的元素不必是同一类型:>>>squares=[1,4,9,16,25]>>>squares[1,4,9,16,25]就像字符串(以及其它所有内建的序列类型)一样,列表可以被索引和切片:>>>squares[0]#indexingreturnstheitem1>>>squares[-1]25>>>squares[-3:]#slicingreturnsanewlist[9,16,25]所有的切片操作都会返回一个包含请求的元素的新列表。这意味着下面的切片操作返回列表一个新的(浅)拷贝副本:>>>squares[:][1,4,9,16,25]列表也支持连接这样的操作:>>>squares+[36,49,64,81,100][1,4,9,16,25,36,49,64,81,100]不像不可变的字符串,列表是可变的,它允许修改元素:>>>cubes=[1,8,27,65,125]#something'swronghere>>>4**3#thecubeof4is64,not65!64>>>cubes[3]=64#replacethewrongvalue>>>cubes[1,8,27,64,125]你还可以使用append()方法(后面我们会看到更多关于列表的方法的内容)在列表的末尾添加新的元素:>>>cubes.append(216)#addthecubeof6>>>cubes.append(7**3)#andthecubeof7>>>cubes[1,8,27,64,125,216,343]也可以对切片赋值,此操作可以改变列表的尺寸,或清空它:>>>letters=['a','b','c','d','e','f','g']>>>letters['a','b','c','d','e','f','g']>>>#replacesomevalues>>>letters[2:5]=['C','D','E']>>>letters['a','b','C','D','E','f','g']>>>#nowremovethem>>>letters[2:5]=[]>>>letters['a','b','f','g']>>>#clearthelistbyreplacingalltheelementswithanemptylist>>>letters[:]=[]>>>letters[]内置函数len()同样适用于列表:>>>letters=['a','b','c','d']>>>len(letters)4允许嵌套列表(创建一个包含其它列表的列表),例如:>>>a=['a','b','c']>>>n=[1,2,3]>>>x=[a,n]>>>x[['a','b','c'],[1,2,3]]>>>x[0]['a','b','c']>>>x[0][1]'b'3.2.编程的第一步编程的第一步¶当然,我们可以使用Python完成比二加二更复杂的任务。例如,我们可以写一个生成菲波那契子序列的程序,如下所示:>>>#Fibonacciseries:...#thesumoftwoelementsdefinesthenext...a,b=0,1>>>whileb<10:...print(b)...a,b=b,a+b...112358这个例子介绍了几个新功能。第一行包括了一个多重赋值:变量a和b同时获得了新的值0和1最后一行又使用了一次。在这个演示中,变量赋值前,右边首先完成计算。右边的表达式从左到右计算。条件(这里是b<10)为true时,while循环执行。在Python中,类似于C,任何非零整数都是true;0是false。条件也可以是字符串或列表,实际上可以是任何序列;所有长度不为零的是true,空序列是false。示例中的测试是一个简单的比较。标准比较操作符与C相同:<,>,==,<=,>=和!=。循环体是缩进的:缩进是Python组织语句的方法。Python(还)不提供集成的行编辑功能,所以你要为每一个缩进行输入TAB或空格。实践中建议你找个文本编辑来录入复杂的Python程序,大多数文本编辑器提供自动缩进。交互式录入复合语句时,必须在最后输入一个空行来标识结束(因为解释器没办法猜测你输入的哪一行是最后一行),需要注意的是同一个语句块中的每一行必须缩进同样数量的空白。关键字print()语句输出给定表达式的值。它控制多个表达式和字符串输出为你想要字符串(就像我们在前面计算器的例子中那样)。字符串打印时不用引号包围,每两个子项之间插入空间,所以你可以把格式弄得很漂亮,像这样:>>>i=256*256>>>print('Thevalueofiis',i)Thevalueofiis65536用一个逗号结尾就可以禁止输出换行:>>>a,b=0,1>>>whileb<1000:...print(b,end=',')...a,b=b,a+b...1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,Footnotes[1]因为**的优先级高于-,所以-3**2将解释为-(3**2)且结果为-9。为了避免这点并得到9,你可以使用(-3)**2。[2]与其它语言不同,特殊字符例如\n在单引号('...')和双引号("...")中具有相同的含义。两者唯一的区别是在单引号中,你不需要转义"(但你必须转义\'),反之亦然。4.深入深入Python流程控制流程控制¶除了前面介绍的while语句,Python还从其它语言借鉴了一些流程控制功能,并有所改变。4.1.if语句语句¶也许最有名的是if语句。例如:>>>x=int(input("Pleaseenteraninteger:"))Pleaseenteraninteger:42>>>ifx<0:...x=0...print('Negativechangedtozero')...elifx==0:...print('Zero')...elifx==1:...print('Single')...else:...print('More')...More可能会有零到多个elif部分,else是可选的。关键字‘elif‘是’elseif’的缩写,这个可以有效地避免过深的缩进。if...elif...elif...序列用于替代其它语言中的switch或case语句。4.2.for语句语句¶Python中的for语句和C或Pascal中的略有不同。通常的循环可能会依据一个等差数值步进过程(如Pascal),或由用户来定义迭代步骤和中止条件(如C),Python的for语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。例如(没有暗指):>>>#Measuresomestrings:...words=['cat','window','defenestrate']>>>forwinwords:...print(w,len(w))...cat3window6defenestrate12在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点:>>>forwinwords[:]:#Loopoveraslicecopyoftheentirelist....iflen(w)>6:...words.insert(0,w)...>>>words['defenestrate','cat','window','defenestrate']4.3.range()函数函数¶如果你需要一个数值序列,内置函数range()会很方便,它生成一个等差级数链表:>>>foriinrange(5):...print(i)...01234range(10)生成了一个包含10个值的链表,它用链表的索引值填充了这个长度为10的列表,所生成的链表中不包括范围中的结束值。也可以让range()操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为“步长”):range(5,10)5through9range(0,10,3)0,3,6,9range(-10,-100,-30)-10,-40,-70需要迭代链表索引的话,如下所示结合使用range()和len()>>>a=['Mary','had','a','little','lamb']>>>foriinrange(len(a)):...print(i,a[i])...0Mary1had2a3little4lamb不过,这种场合可以方便的使用enumerate(),请参见循环技巧。如果你只是打印一个序列的话会发生奇怪的事情:>>>print(range(10))range(0,10)在不同方面range()函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。我们称此类对象是可迭代的,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。我们已经见过的for语句就是这样一个迭代器。list()函数是另外一个(迭代器),它从可迭代(对象)中创建列表:>>>list(range(5))[0,1,2,3,4]稍后我们会看到更多返回可迭代(对象)和以可迭代(对象)作为参数的函数。4.4.break和和continue语句语句,以及循环中的以及循环中的else子句子句¶break语句和C中的类似,用于跳出最近的一级for或while循环。循环可以有一个else子句;它在循环迭代完整个列表(对于for)或执行条件为false(对于while)时执行,但循环被break中止的情况下不会执行。以下搜索素数的示例程序演示了这个子句:>>>forninrange(2,10):...forxinrange(2,n):...ifn%x==0:...print(n,'equals',x,'*',n//x)...break...else:...#loopfellthroughwithoutfindingafactor...print(n,'isaprimenumber')...2isaprimenumber3isaprimenumber4equals2*25isaprimenumber6equals2*37isaprimenumber8equals2*49equals3*3(Yes,这是正确的代码。看仔细:else语句是属于for循环之中,不是不是if语句。)与循环一起使用时,else子句与try语句的else子句比与if语句的具有更多的共同点:try语句的else子句在未出现异常时运行,循环的else子句在未出现break时运行。更多关于try语句和异常的内容,请参见异常处理。continue语句是从C中借鉴来的,它表示循环继续执行下一次迭代:>>>fornuminrange(2,10):...ifnum%2==0:...print("Foundanevennumber",num)...continue...print("Foundanumber",num)Foundanevennumber2Foundanumber3Foundanevennumber4Foundanumber5Foundanevennumber6Foundanumber7Foundanevennumber8Foundanumber94.5.pass语句语句¶pass语句什么也不做。它用于那些语法上必须要有什么语句,但程序什么也不做的场合,例如:>>>whileTrue:...pass#Busy-waitforkeyboardinterrupt(Ctrl+C)...这通常用于创建最小结构的类:>>>classMyEmptyClass:...pass...另一方面,pass可以在创建新代码时用来做函数或控制体的占位符。可以让你在更抽象的级别上思考。pass可以默默的被忽视:>>>definitlog(*args):...pass#Remembertoimplementthis!...4.6.定义函数定义函数¶我们可以创建一个用来生成指定边界的斐波那契数列的函数:>>>deffib(n):#writeFibonacciseriesupton..."""PrintaFibonacciseriesupton."""...a,b=0,1...whilea<n:...print(a,end='')...a,b=b,a+b...print()...>>>#Nowcallthefunctionwejustdefined:...fib(2000)011235813213455891442333776109871597关键字def引入了一个函数定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为docstring。(更多关于docstrings的信息请参考文档字符串)有些工具通过docstrings自动生成在线的或可打印的文档,或者让用户通过代码交互浏览;在你的代码中包含docstrings是一个好的实践,让它成为习惯吧。函数调用会为函数局部变量生成一个新的符号表。确切的说,所有函数中的变量赋值都是将值存储在局部符号表。变量引用首先在局部符号表中查找,然后是包含函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,全局变量不能在函数中直接赋值(除非用global语句命名),尽管他们可以被引用。函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是传值调用(这里的值总是一个对象引用,而不是该对象的值)。[1]一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建。一个函数定义会在当前符号表内引入函数名。函数名指代的值(即函数体)有一个被Python解释器认定为用户自定义函数的类型。这个值可以赋予其他的名字(即变量名),然后它也可以被当做函数使用。这可以作为通用的重命名机制:>>>fi
本文档为【python3.6.0入门指导(官方版)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
盼盼书屋
暂无简介~
格式:pdf
大小:799KB
软件:PDF阅读器
页数:0
分类:高中语文
上传时间:2019-11-27
浏览量:12