Python3.2.3官方文档(中文版)

阅读: 评论:0

2024年1月31日发(作者:)

Python3.2.3官方文档(中文版)

Python3.2.3官方文档翻译译者夜深人静后的码农Python3.2.3官方文档译者序首先感谢客户小马哥,因为有他的打击,才会有今天这份文档。至今仍清楚地记得笔者在小马哥的面试过程中那段场景:小马哥:“还会其他编程语言吗”笔者:“不会”小马哥:“听过python吗”笔者:“听过”小马哥:“了解python吗”笔者:“不了解”小马哥:“也就是说只知道python这个名字,对吧”当听到这句话的,笔者的小心脏立刻刺激得受不了了。心里感觉这话就像问一个数学教授知道勾股定理吗,然而回答竟是只听过。当时笔者心里犹如九把刀左一刀右一刀在划啊,一划一道渠,一划一道渠。当晚回去果断淡定不了了。开机、下载、编写,于是一个崭新python版的helloword出现了print’HelloWorld’然后自信满满地run:结果定眼一看,红灿灿一行:SyntaxError:invalidsyntax接下半个小时debug呀,debug啊,debug呀,度娘完了问google,问完中文换英文..那个郁闷啊,趋向无穷大。笔者的多少脂肪就这样无名地被燃烧了。于是低下眉头,突然计上心头,果断后面加个括号。竟然成功了,后来一查api,“我靠”,python3.2更改方法了,并不向下兼容。突然心中有千万只草泥马浩浩荡荡奔腾而过啊。于是盯着电脑吐槽:“python,你丫的装什么牛逼,人家台湾教授说中国内陆的河南南一半地方都吃不起茶叶蛋,但俺作为更内陆的甘肃人今天还都干了两个蛋蛋。你等着,看哥怎么收拾你”。于是一个翻译python官方文档的计划产生了,经过两个月在伸手不见五指的夜晚鏖战,终于把python这货的3.2.3的英文api文档给翻译出来啦,于大家分享。最后,由于笔者英文水平有限,有不当之处,请尽力吐槽,不过有个要求,吐槽一定要让笔者知道。当然扔鞋也是欢迎的啦,扔两只那是相当的感动,要是扔两只男式42码的帆布鞋那直接泪崩。译者邵向兵博客:/sxb/article/1吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农目录第一章Python初步介绍..................................................................................................................51.1Python用作计算器...............................................................................................................51.1.1数字............................................................................................................................51.1.2字符串.......................................................................................................................81.1.3列表..........................................................................................................................141.2初步走进编程之门............................................................................................................16第二章更多控制流程语句.............................................................................................................182.1if语句..................................................................................................................................182.2for语句...............................................................................................................................192.3range()方法.........................................................................................................................202.4break和continue语句和在循环中的else子句...........................................................212.5Pass语句.............................................................................................................................222.6定义方法............................................................................................................................232.7更多关于方法定义............................................................................................................252.7.1默认参数值.............................................................................................................252.7.2关键字参数.............................................................................................................272.7.3可变参数列表.........................................................................................................292.7.4拆分参数列表.........................................................................................................292.7.5形式.........................................................................................................................302.7.6文档字符串.............................................................................................................302.8编码风格....................................................................................................................31第三章数据结构.............................................................................................................................323.1列表....................................................................................................................................323.1.1把列表当做栈来用.................................................................................................333.1.2把列表当做队列来用.............................................................................................343.1.3递推式构造列表.....................................................................................................353.1.4嵌套列表推导式.....................................................................................................373.3元组和序列........................................................................................................................383.4Set集合...............................................................................................................................403.5字典....................................................................................................................................412吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农3.6遍历技巧............................................................................................................................433.7深入条件控制....................................................................................................................44第四章模块.....................................................................................................................................454.1深入模块............................................................................................................................474.1.1像脚本一样执行484.1.2模块的搜索路径.....................................................................................................484.1.3编译python文件....................................................................................................494.2标准接口............................................................................................................................494.3dir()函数..............................................................................................................................504.4包........................................................................................................................................514.4.1从包中导入*...........................................................................................................534.4.2包内引用.................................................................................................................544.4.3跨目录的包.............................................................................................................55第五章输入输出.............................................................................................................................555.1格式化输出........................................................................................................................555.1.1旧式字符串格式化.................................................................................................605.2文件读写.............................................................................................................................605.2.1文件对象中方法.....................................................................................................615.2.2pickle模块...............................................................................................................63第六章类.........................................................................................................................................646.1名称和对象相关术语........................................................................................................656.2Python作用域和命名空间................................................................................................656.2.1作用域和命名空间实例.........................................................................................676.3初识类................................................................................................................................686.3.1类定义语法.............................................................................................................686.3.2类对象.....................................................................................................................686.3.3实例对象.................................................................................................................706.3.4方法对象.................................................................................................................706.4一些说明............................................................................................................................716.5继承....................................................................................................................................726.5.1多重继承.................................................................................................................733吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农6.6私有变量............................................................................................................................746.7备注.....................................................................................................................................756.8异常也是类........................................................................................................................766.9迭代器................................................................................................................................776.10生成器..............................................................................................................................796.11生成器表达式...................................................................................................................80第七章Python标准库概览............................................................................................................807.1操作系统接口....................................................................................................................807.2文件通配符........................................................................................................................817.3命令行参数........................................................................................................................817.4错误输出重定向和程序终止............................................................................................817.5字符串模式匹配................................................................................................................827.6数学....................................................................................................................................827.7互联网访问........................................................................................................................837.8时间和日期........................................................................................................................837.9数据压缩............................................................................................................................847.10性能评测..........................................................................................................................857.11质量控制..........................................................................................................................857.12内置电池..........................................................................................................................86第八章标准库二.............................................................................................................................868.1输出格式化........................................................................................................................868.2模板....................................................................................................................................888.3使用二进制数据记录布局................................................................................................898.4多线程................................................................................................................................908.5日志....................................................................................................................................908.6弱引用................................................................................................................................918.7列表工具............................................................................................................................928.8十进制浮点数计算............................................................................................................93吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农Python3.2.3官方文档教程第一章Python初步介绍在接下来的实例中,用标记符(>>>和…)来区别输入和输出。想要重现这些实例,你必须输入标记符后面的所有内容。那些不以标记符开头的语句是输出语句。注意在一个例子中在同一行出现第二个标记符意味着你必须输入一行空格。它用来结束多行输入命令。在这本说明书中的好多例子都包括注释,甚至有一些在交互提示符中换行。在python语言中的注释以固定字符#开始,并一直延续到本行的结尾。注释可能出现在每行的开始或者接下来的空格和代码,但不包含在字符串内。在字符串内的#号仅仅就是#符号。由于注释是用来解释说明代码而不能被python编译器所编译,当输入例子的时候注释可以被忽略。例如:#thisisthefirstcommentSPAM=1#andthisisthesecondcomment#...andnowathirdSTERING=“#Thisisnotacomment.”1.1Python用作计算器让我们学习一些简单的python命令。开始翻译和等待主提示符>>>(这不会费时)1.1.1数字解释器充当一个简单的计算器:在里面你可以输入一个表达式,它将会写出结果。表达式语法就是简单的操作符+-*和/,这和大多数语言中(如Pascal和C)用法一样。插入语可以用来分组,例如:>>>2+24>>>#Thisisacomment这是注释...2+2吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农4>>>2+2#andacommentonthesamelineascode在同一行代码中注释4>>>(50-5*6)/45.0>>>8/5#Fractionsaren’tlostwhendividingintegers1.6备注:你可能没精确看到相同的结果。由于机器不同可能会导致浮点数的结果不同。以后我们会看到更多关于控制浮点数输出的例子。也可以参照浮点数运算:问题和局限,这篇文件对浮点数和它们表示之间的细微差别将有个全面的讨论。当整数相除时候,分数不会丢失为了整数相除获得整数结果,有个抛弃了所有小数点的操作符//:>>>#Integerdivisionreturnsthefloor:...7//32>>>7//-3-3“=”符号用来把一个特定值赋值给一个变量,后来,在接下来交互符号前面不显示结果:>>>width=20>>>height=5*9>>>width*height900一个值可以同时赋给好多个变量。>>>x=y=z=0#Zerox,yandz>>>x0>>>y0>>>z0吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农变量在它们使用之前必须被定义(或者赋值),否者会抛出错误。>>>#trytoaccessanundefinedvariable尝试访问一个没有定义的变量...nTraceback(mostrecentcalllast):File"",line1,inNameError:name’n’isnotdefined这里完全支持浮点运算,包含多种类型操作数会吧整型操作数变为浮点数:例如>>>3*3.75/1.57.5>>>7.0/23.5同时也支持复数运算,虚数写得时候以j或者J为前缀。复数一般写成不为0的实数部分(实数+虚数J)或者可以用复数方法complex(实数,虚数)。>>>1j*1J(-1+0j)>>>1j*complex(0,1)(-1+0j)>>>3+1j*3(3+3j)>>>(3+1j)*3(9+3j)>>>(1+2j)/(1+1j)(1.5+0.5j)复数常常用来表示两个浮点数,实数和虚数部分。可以同和从复数z中提取实数和虚数。>>>a=1.5+0.5j>>>1.5>>>0.5吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农针对复数和整数之间的转换方法(float(),int())对复数不适用,它不能正确地把一个复数转化为一个实数.用abs(z)方法可以获得它的大小,or用来获得实数部分。>>>a=3.0+4.0j>>>float(a)Traceback(mostrecentcalllast):File"",line1,in?TypeError:can’tconvertcomplextofloat;useabs(z)>>>3.0>>>4.0>>>abs(a)#sqrt(**2+**2)5.0在交互模式中,最后一个打印出来的表示会赋值给变量_.这就意味着当你用python作为左桌面计算器的时候,它有时很容易继续计算。例如:>>>tax=12.5/100>>>price=100.50>>>price*tax12.5625>>>price+_113.0625>>>round(_,2)113.06这个变量只能被用户只读,不要尝试去给你设值,那样你将会与用内置变量同样的名字变量,重新创建一个独立的新本地变量。1.1.2字符串除了数字,python还可以操作字符串,字符串可以用多种方式被展现。它们可以存在于单引号或者双引号中:吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>’spameggs’’spameggs’>>>’doesn’t’"doesn’t">>>"doesn’t""doesn’t">>>’"Yes,"hesaid.’’"Yes,"hesaid.’>>>""Yes,"hesaid."’"Yes,"hesaid.’>>>’"Isn’t,"shesaid.’’"Isn’t,"shesaid.’解释器输出字符串操作结果,如同和它们输入的方式一样。在引号里面的引号需要通过反斜杠进行转义来显示正确的数值。如果字符串中包含单引号而没有双引号,则字符串应该被双引号包围。否则用单引号包围。Print()方法可以对输入的字符输出更可读的结果。字符创常量可以用不同的方法分在好多行。可以用反斜杠作为行最后一个字符,用来实现与下一行的逻辑连接。例如:hello="Thisisarhatwhitespaceatthebeginningofthelineissignificant."print(hello)注意新行仍然需要被嵌入在字符串中,并且新行尾部需要一个反斜杠。例如打印结果如下:Thisisaatwhitespaceatthebeginningofthelineissignificant.或则,可用一对三个引号或者“‘把字符串包围,当运行三个字符串的时候,行尾不是没有转义,而是包含着字符中了。因此,如下利用一个反斜杠来避免无用的初始化空行。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农print("""Usage:thingy[OPTIONS]-hDisplaythisusagemessage-HhostnameHostnametoconnectto""")打印结果如下:Usage:thingy[OPTIONS]-hDisplaythisusagemessage-HhostnameHostnametoconnectto如果我们想吧字符串当做输入字符,n字符不被转为新行,而是作为代码中的结束符。都当做数据包含在字符串中。例如:hello=r"ThisisaratherlongstringcontainingnseverallinesoftextmuchasyouwoulddoinC."print(hello)打印结果:ThisisaratherlongstringcontainingnseverallinesoftextmuchasyouwoulddoinC.字符串还可以用+操作符进行相加和*操作符进行重复。例如:>>>word=’Help’+’A’>>>word’HelpA’>>>’<’+word*5+’>’’’两个彼此相邻的字符串可以自动相连接。上面第一行可以被写成”Help”A”:这种方法主要用作两个字符串变量,而不是任意字符串表达式。>>>’str’’ing’#<-Thisisok’string’>>>’str’.strip()+’ing’#<-Thisisok吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农’string’>>>’str’.strip()’ing’#<-ThisisinvalidFile"",line1,in?’str’.strip()’ing’^SyntaxError:invalidsyntax像C一样,字符串可以被索引。字符串的第一个字符的下标是0,这不需要任何的分割符。一个字符就简单说就是长度为1的字符串。犹如在图表编程语言中,子字符串可以被切片符号表示。两个字符被冒号分割。例如:>>>word[4]’A’>>>word[0:2]’He’>>>word[2:4]’lp’切片索引有自己的默认值,前面确实表示默认为0,后面确实表示默认为字符串的长度。>>>word[:2]#Thefirsttwocharacters’He’>>>word[2:]#Everythingexceptthefirsttwocharacters’lpA’不像C语言的字符串,python字符串不可以改变,如果在字符串中给特定的索引设值会导致错误:>>>word[0]=’x’Traceback(mostrecentcalllast):File"",line1,in?TypeError:’str’objectdoesnotsupportitemassignment>>>word[:1]=’Splat’Traceback(mostrecentcalllast):File"",line1,in?TypeError:’str’objectdoesnotsupportsliceassignment吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农但是通过结合字符串内容可以创建一个新的字符串是容易而有效的。>>>’x’+word[1:]’xelpA’>>>’Splat’+word[4]’SplatA’一个有用的不变切分表达式就等于字符串。>>>word[:2]+word[2:]’HelpA’>>>word[:3]+word[3:]’HelpA’不正确的切片索引可以被智能的处理。如果索引大于字符串长度,则用字符串长度代替。如果上索引值小于下索引则会返回一个空字符串。>>>word[1:100]’elpA’>>>word[10:]’’>>>word[2:1]’’索引值可以为负数,表示从右边开始计数。例如>>>word[-1]#Thelastcharacter’A’>>>word[-2]#Thelast-but-onecharacter’p’>>>word[-2:]#Thelasttwocharacters’pA’>>>word[:-2]#Everythingexceptthelasttwocharacters’Hel’但是要注意:-0和0的作用是相同的。因此不会从右边开始计数。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>word[-0]#(since-0equals0)’H’超出负数的索引会被截断,但不要尝试用超出负数的索引做单个元素的索引:>>>word[-100:]’HelpA’>>>word[-10]#errorTraceback(mostrecentcalllast):File"",line1,in?IndexError:stringindexoutofrange记住切片如何工作的一种方法就是把索引认为是两个字符之间的节点。这个字符串的左边下限为0,右边上限为n.+---+---+---+---+---+|H|e|l|p|A|+---+---+---+---+---+0-512345-4-3-2-1对于没有负数的索引,切片的长度与索引的长度不相同。如果两个都有界限,例如,长度就等于两者之差。word[1:3]的长度就是2.内置函数的方法len()就会返回字符串的长度:>>>s=’supercalifragilisticexpialidocious’>>>len(s)34关于编码:从3.0开始python支持所有的编码格式。如果你想在字符串中包含特殊的字符,你可以利用pythonUnicode-escape编码进行实现。下面例子就是很好展示:>>>’Hellou0020World!’’HelloWorld!’吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农转义字符串u0020表示在给定的位置插入空格(空格的编码就是0x0020)除了这些标准的字符编码以外,python还提供了一整套其他形式的编码来在已知的编码基础上创建特定编码字符串。为了把一个字符串转化为特殊编码的字符,字符串对象提供了一种方法encode()方法。编码的小写字母是引用参数:>>>"Äpfel".encode(’utf-8’)b’xc3x84pfel’1.1.3列表Python可以支持一些符合数据类型,常常和只一起分类。最典型的就是list,它可以写成在方括号内一组用逗号分开的数值。List的数据项不一定都是相同的类型。>>>a=[’spam’,’eggs’,100,1234]>>>a[’spam’,’eggs’,100,1234]像字符串索引一样,列表索引从0开始,也可以切分和连接。>>>a[0]’spam’>>>a[3]1234>>>a[-2]100>>>a[1:-1][’eggs’,100]>>>a[:2]+[’bacon’,2*2][’spam’,’eggs’,’bacon’,4]>>>3*a[:3]+[’Boo!’][’spam’,’eggs’,100,’spam’,’eggs’,100,’spam’,’eggs’,100,’Boo!’]所以的切操作符都返回一个包含要求元素的新列表,这意外着以下操作将返回列表a的一份浅吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农拷贝。>>>a[:][’spam’,’eggs’,100,1234]不像不可变的字符串,列表可以改变列表中的元素。>>>a[’spam’,’eggs’,100,1234]>>>a[2]=a[2]+23>>>a[’spam’,’eggs’,123,1234]对片段设置也是允许的,这甚至能够改变list的大小和全部清除。>>>#Replacesomeitems:...a[0:2]=[1,12]>>>a[1,12,123,1234]>>>#Removesome:...a[0:2]=[]>>>a[123,1234]>>>#Insertsome:...a[1:1]=[’bletch’,’xyzzy’]>>>a[123,’bletch’,’xyzzy’,1234]>>>#Insert(acopyof)itselfatthebeginning>>>a[:0]=a>>>a[123,’bletch’,’xyzzy’,1234,123,’bletch’,’xyzzy’,1234]>>>#Clearthelist:replaceallitemswithanemptylist>>>a[:]=[]>>>a吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农[]内置方法len()也支持列表>>>a=[’a’,’b’,’c’,’d’]>>>len(a)4列表也可以充当另一个列表的元素>>>q=[2,3]>>>p=[1,q,4]>>>len(p)3>>>p[1][2,3]>>>p[1][0]2可以在列表结尾操作。>>>p[1].append(’xtra’)>>>p[1,[2,3,’xtra’],4]>>>q[2,3,’xtra’]注意在上面例题中,p[1]和q常常都是指同样的对象,接下来我们学习对象语法。Notethatinthelastexample,p[1]andqreallyrefertothesameobject!We’llcomebacktoobjectsemanticslater.1.2初步走进编程之门备注:在此换了pdf阅读器,以致从pdf原文件中的python关键字无法标色,故下文python源码统一用蓝色。当然,我们可以运用python实现更加复杂的任务而不仅仅是两个数的相加,例如,我们一吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农个斐波拉契数列的子数列:>>>#Fibonacciseries:...#a,b=0,1>>>whileb<10:...print(b)...a,b=b,112358这个例子介绍了一些新的特性。首先,第一行包含一个双重赋值,变量a和b同时获得新的值0和1,在最后一行这种方法再次被使用,在此说明在右边的表达式在任何表达式赋值之前进行。右边的表达式依次会从左到右赋值。其次,只要条件(b<10)满足,则while循环语句就会执行下去。在python语句和C一样,任何非零整数的值是真的,零为假的。条件也可以是一个字符串或者一个列表值事实上都是序列。非零长度的字符串是真的,空字符串是假的。可以做个简单的测试,标准的字符比较操作符和C中的一样,<>==<=>=!=接着,循环的主体是要缩进的,随进符是分类语句的python方法。在相互交互提醒符中,必须输入一个tab或者空格为每一岁缩进行。事实上,你可以再文本编辑器上为python准备更加复杂的输入。所以常规的文本编辑器都有自己缩进属性,当符合语句交互输入时,必须由空行来标记结束。注意包含基本代码块的代码行必须缩进同样的字符长度。最后,print输出表达式被赋予的值,这与你想要写的表达式(上节在计算器例子中)不相同,所使用方式与处理重复表达式、浮点数量和字符串的一样。字符串打印时没有引号,会在字符串之间插入空格,因此你能更好的格式化这些字符串。如下:>>>i=256吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农*256>>>print(’Thevalueofiis’,i)Thevalueofiis65536在输出之后可以用关键字结束符来避免新行,或者用不同字符串结束输出。>>>a,b=0,1>>>whileb<1000:...print(b,end=’,’)...a,b=b,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,第二章更多控制流程语句除了前面介绍的while语句外,python也使用在其他语言中所熟知的一些流程控制语句。2.1if语句可能最被人周知控制语句就是if语句了,例如:>>>x=int(input("Pleaseenteraninteger:"))Pleaseenteraninteger:42>>>ifx<0:...print(’Negativechangedtozero’)...elifx==0:...print(’Zero’)...elifx==1:...print(’Single’)...else:...print(’More’)吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农...MoreElif可不出现也可多次出现和else部分也是可以选择的。关键elif是elseif的缩写形式,对于避免冗长的定义有很大帮助。If...Elif语句在其他变成语言中可用switch或case语句来替代。2.2for语句在python中的for语句可能有以前你在C或者pascal中所用的有点小差别。她既不像Pascal语言中常常遍历数组的算法过程,也不像在C语言中给用户自己定义遍历步骤或模糊条件的能力,python中的for语句可以按照元素在序列(列表或者字符串)中出现的顺序逐步地遍历它们。例如:>>>#Measuresomestrings:...a=[’cat’,’window’,’defenestrate’]>>>forxina:...print(x,len(x))...cat3window6defenestrate12在循环语句中修改正在遍历的序列是不安全的(这种情况仅仅发生在可变类型中,如列表)。如果你需要修改你正在遍历的列表(例如,想复制选中项)你必须首先复制list。然后利用分片符号很方便实现它。>>>forxina[:]:#iflen(x)>6:(0,x)...>>>a[’defenestrate’,’cat’,’window’,’defenestrate’]吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农2.3range()方法如果你想迭代一个数字序列,内置方法range()可以很方便实现它。它可以生成连续的数字:>>>foriinrange(5):...print(i)...01234方法中给出的结点不是产生序列中的一部分。Range(10)就是产生为长度为10序列中每个元素产生10个合法的索引值。该方法也可以让范围从其他数字开始,或者指定不同的增长数(甚至是负数,有时称这为阶梯)。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])...0Mary1had2a3little吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农4lamb但是,在许多情况下,运用enumerate()方法会更加方法,具体参照LoopingTechniques.如果你想打印一个范围,奇怪的现象将会出现。>>>print(range(10))range(0,10)在很多情况下利用range()返回对象表现像列表,但实际上它不是列表。尽管当你迭代期望序列时,它能够依次地返回元素,但是它没有真正生成列表,因此节省空间。我们可以把对象成为是可迭代的,就是指它很适合作为预期得到有序元素事情的方法和结构的对象。我们已经知道for语句就是这种迭代器。方法list()也算一个,它可以产生有序列表。>>>list(range(5))[0,1,2,3,4]稍后我们会看到更多能返回迭代对象和把迭代对象当做内容的方法。2.4break和continue语句和在循环中的else子句与在C语言中一样,Break语句将会跳出离它最近的for或者while循环。Continue语句也是从C中借鉴而来,继续开始循环的下一步。循环语句中有时含有else的子句。当通过遍历结束导致循环终止(for)或者当循环条件变为false(如while),它将会执行。但是当循环被break语句所终止,它不会被执行。下面通过查询质数这个例子来学习:吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农是的,这是正确代码。请仔细看,else语句是属于for循环的,而不是if语句。与else用在if语句中相比,else用于循环中与用在try语句有更多相同之处。在try语句中当没有异常发生else语句将会执行,循环中当没有break发生else语句就会执行。对于更多的关于try语句和异常的信息可以查看处理异常:2.5Pass语句Pass语句一般做些无关紧要的事情,当按照句法语句被要求时但是系统不需要任何操作,此时可以用pass语句。例如:>>>whileTrue:...pass#Busy-waitforkeyboardinterrupt(Ctrl+C)...还常常用在创建最小类中。>>>classMyEmptyClass:...能用到pass的另一个地方就是当你运行新代码时它作为方法或者条件主体的拥有者,允许你在一个更加抽象的层次去不停地思考。Pass将会被静静忽略:吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>definitlog(*args):...pass#Remembertoimplementthis!...2.6定义方法我们可以创建一个实现任意范围内的斐波那契数列的输出功能方法。>>>deffib(n):#writeFibonacciseriesupton写出在n以内的斐波那契数列..."""PrintaFibonacciseriesupton."""输出在n以内的斐波那契数列...a,b=whilea>>#Nowcallthefunctionwejustdefined:...fib(232333776109871597关键字def是方法定义的标志。接下来紧跟方法名和被圆括号所包围的参数列表。方法的主体语句将在下一行开始并且必须缩进。方法主体的首句可选择性地是一句字符,用来说明方法的主要功能。(更多的文档注释可以参照文档语句)。运用docString可以自动地生成网页或者打印文档。或者让用户更有效地浏览代码。在你写的代码中包含文档语句是个很好的行为,因此要养成这个习惯。方法的实施标志着将会有一张新的符号表用来保存该方法的本地变量。更准确地说,在方法中所有的变量赋值都会保存到新的本地符号表中。然而,在变量符号表中首先看到的是引用。接着是围绕方法的本地符号表,接着是全局符号表,最后是内置名称的表。因此,尽管全局变量在一个方法中被引用,但它们不能被直接赋值(除非在全局语句中被命名)。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农方法调用的真正参数时候,参数将会在被调用方法的本地符号表中被标记。因此,参数可以用调用值来传递。(这里的值其实是对象的引用,而不是对象值本身)。当一个方法调用另一个方法,系统将会为新调用方法产生新的本地符号表。在目前的符号表中方法定义采用方法名字。方法名字的值有个被解释器确认为用户自定义方法的类型。其他可以用在方法名称的值可以重新赋值给上面提到的方法名称。这可以认为是一个普遍的重命名机制。>>>fib>>>f=fib>>>f(100)45589你从其他语言转过来学习python,你可能反对fib不是一个方法而是一个过程。因为它没有返回值。事实上,任何没有return语句的方法都有返回值,即使是相当无聊的方法。这个返回值就是null(这是内置名称)。如果返回值只有一个可写值,那么输出为空是被解释器所禁止的。如果你真想用print()方法你就会看到:>>>fib(0)>>>print(fib(0))None写一个有返回斐波那契数列值得方法是很简单的,代替打印输出。>>>deffib2(n):#"""ReturnalistcontainingtheFibonacciseriesupton."""...result=[]...a,b=whilea

Python3.2.3官方文档翻译译者夜深人静后的码农...>>>f100=fib2(100)#callit>>>f100#writetheresult[0,1,1,2,3,5,8,13,21,34,55,89]通常一样,这个例子涉及一些新的python特性。Return语句表示从方法中返回一个值。没有return语句表示放回一个None.没有执行到方法结尾也返回None.(a)语句是调用列表对象result的一个方法。一个方法属于该对象就可以用对象.方法名称进行调用。不同类型可以定义不同的方法,不同类型的方法可以有相同的名称不会引起冲突。在例子中显示的方法append()被定义在list对象中。该方法意思是在list末尾增加一个新的元素。在这个例子它等同于result者更有效率。=result+[a],但是比后2.7更多关于方法定义Python允许用可变数目的参数定义方法。以下有可以相互结合的三种方法。2.7.1默认参数值最有用的形式就是给一个或多个变量制定默认值。这种方法可以创建一个允许调用时比定义时需要更少的参数。例如:defask_ok(prompt,retries=4,complaint=’Yesorno,please!’):whileTrue:ok=input(prompt)ifokin(’y’,’ye’,’yes’):returnTrueifokin(’n’,’no’,’nop’,’nope’):returnFalseretries=retries-1吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农ifretries<0:raiseIOError(’refusenikuser’)print(complaint)这个方法可以用以下几种方法调用:给个唯一常量:ask_ok(’Doyoureallywanttoquit?’)给一个变量:ask_ok(’OKtooverwritethefile?’,2)设置所有的变量:ask_ok(’OKtooverwritethefile?’,2,’Comeon,onlyyesorno!’)这个实例也介绍关键in的用法。其功能在于测试输入字符串是否还有特定的值。默认值也可以在方法定义时候就被限制范围。例如:i=5deff(arg=i):print(arg)i=6f()将会输出5重要提醒:默认值仅被设置一次,这与以前默认值为可变对象(如列表、字典和多数类实例时)有很大的区别。例如,接下来的方法累计被传入的参数变量到下次调用:deff(a,L=[]):(a)returnLprint(f(1))print(f(2))print(f(3))将会输出[1][1,2][1,2,3]如果你不想默认值在两个调用时分享。你可以写如下方法代替上面。deff(a,L=None):吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农ifLisNone:L=[](a)returnL2.7.2关键字参数可以通过形式关键字参数调用方法。例如,接下来方法:defparrot(voltage,state=’astiff’,action=’voom’,type=’NorwegianBlue’):print("--Thisparrotwouldn’t",action,end=’’)print("ifyouput",voltage,"voltsthroughit.")print("--Lovelyplumage,the",type)print("--It’s",state,"!")接受1个要求的参数(voltage)和三个可选择参数(state,action和type)。这个方法用以下任何一种方法调用。parrot(1000)#1positionalargumentparrot(voltage=1000)#1keywordargumentparrot(voltage=1000000,action=’VOOOOOM’)#2keywordargumentsparrot(action=’VOOOOOM’,voltage=1000000)#2keywordargumentsparrot(’amillion’,’bereftoflife’,’jump’)#3positionalargumentsparrot(’athousand’,state=’pushingupthedaisies’)#1positional,1keyword但以下方法调用时不合法:parrot()#requiredargumentmissing必须的参数缺失parrot(voltage=5.0,’dead’)#non-keywordargumentafterakeywordargument关键参数后无关键参数parrot(110,voltage=220)#duplicatevalueforthesameargument同一参数重复赋值parrot(actor=’JohnCleese’)#unknownkeywordargument无名的关键参数在方法调用中,关键字参数必须遵循位置参数。所有的关键参数必须符合方法接受的参数其中之一。(例如,actor不是parrot方法的合法参数),但是它们的次序不重要。这包含非选择的参数(例如parrot(voltage=1000)是合法的)。没有参数可以多次接受一个值。以下例吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农子由于这种限制而运行有问题。>>>deffunction(a):...>>>function(0,a=0)Traceback(mostrecentcalllast):File"",line1,in?TypeError:function()gotmultiplevaluesforkeywordargument’a’当最后一个形参是**name时,它可以接受包含除了形式参数之外的所有关键字的字典。这可以和形如“*name”的形式参数结合使用。*name将会在下节讲到,它可以接受包含位置参数的数组。*name必须在**name之前出现。例如,我们可以如下方法:defcheeseshop(kind,*arguments,**keywords):print("--Doyouhaveany",kind,"?")print("--I’msorry,we’realloutof",kind)forarginarguments:print(arg)print("-"*40)keys=sorted(())forkwinkeys:print(kw,":",keywords[kw])它可以按照如下方法调用cheeseshop("Limburger","It’sveryrunny,sir.","It’sreallyvery,VERYrunny,sir.",shopkeeper="MichaelPalin",client="JohnCleese",sketch="CheeseShopSketch")结果如下:--DoyouhaveanyLimburger?--I’msorry,we’realloutofLimburger吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农It’sveryrunny,’sreallyvery,VERYrunny,sir.----------------------------------------client:JohnCleeseshopkeeper:MichaelPalinsketch:CheeseShopSketch2.7.3可变参数列表最后,相对不太频繁常用的方式是调用含有可变参数的方法。这些参数常被包含在元组中。在可变的参数中,零或更多正式参数都可能出现。defwrite_multiple_items(file,separator,*args):((args))正常来说,这些可变参数常常放在正式参数列表的后面,因为它们会包揽所有传递给该方法的剩余输入参数。任何出现在*args参数后低的正式参数会被认为是关键字参数,意味着它们只能当关键字使用而不是位置参数。>>>defconcat(*args,sep="/"):...(args)...>>>concat("earth","mars","venus")’earth/mars/venus’>>>concat("earth","mars","venus",sep=".")’’2.7.4拆分参数列表当参数已经存在列表或者元组中,但是需要分拆以供要求分离位置参数调用的方法,这是相反的情景出现了。例如:在内置方法range()中期望获得独自的开始和停止参数。如果单独分开它们无法使用,就需要写一个方法用*操作符来调用实现分拆列表或者元组中的参数。>>>list(range(3,6))#normalcallwithseparatearguments[3,4,5]吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>args=[3,6]>>>list(range(*args))#callwithargumentsunpackedfromalist[3,4,5]2.7.5同样的使用形式,字典可以用**操作符实现关键字参数。>>>defparrot(voltage,state=’astiff’,action=’voom’):...print("--Thisparrotwouldn’t",action,end=’’)...print("ifyouput",voltage,"voltsthroughit.",end=’’)...print("E’s",state,"!")...>>>d={"voltage":"fourmillion","state":"bleedin’demised","action":"VOOM"}>>>parrot(**d)2.7.5形式由于普遍需要,在函数程序语言中会发现一个共同的特性,像Python中添加Lisp。像匿名关键字、小型匿名方法也被创建。下面这个方法返回两个参数的和。Lamdbaa,b:a+b.哪儿需要方法时,哪儿就可以使用形式。它们是根据句法限制在一个简单的表达式。在语义上,它们仅是针对正式方法定义的语法补充。像内嵌方法定义中,形式也可通过包含范围中引用变量。>>>defmake_incrementor(n):...returnlambdax:>>>f=make_incrementor(42)>>>f(0)42>>>f(1)432.7.6文档字符串在python中关于文档字符串的内容和格式有个规范。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农第一行常常是一句对对象作用的剪短而又准确地总结。尽管简洁,但不能明确声明对象的名称和类型,因为通过其他方法(除了名字恰好是一个描述方法功能的动词)它们依然是可用的。>>>defmy_function():..."""No,really,itdoesn’"""...>>>print(my_function.__doc__)Donothing,,really,itdoesn’tdoanything.2.8编码风格现在你准备写出更长而复杂的python代码了,也是该告诉你关于python的编码风格时候了。很多语言可以用不同的风格进行编码。有些风格比其他风格编写的代码更有可读性。因此,让别人能有轻易地读懂你的代码是一直是个好想法,并且养成这种良好的编码风格将更大地帮助你。对于python,PEP8作为许多项目应该遵守的编码指导书而做的。它提出了一种可读而悦目的编码风格。每位python开发者应该读它。这里抽出一个重要的事项与你分享:用四个空格代替tab键每行不要超过79个字符。用空行分离方法和类,大块代码中的方法。必要的时候为每行添加注释。用文档字符串。在操作符两边用空格用统一的风格命名自定义的方法和类如果你的代码打算用在国际环境中,请不要用想象的字符编码。Python默认的是31吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农utf-8,在任何情况下可以用Ascii.同样的,即使有很少机会让说不同语言的人们读代码或者维护代码,但在定义中不要用非ASCII编码字符。第三章数据结构这章将详细学习你以前已经知道的知识,同时也会添加一些新知识。3.1列表列表数据类型有很多方法,以下是列表对象的所有方法:(x)添加单个元素到列表末尾,等同于a[len(a)]=[x](L)通过添加指定列表中所有的元素来扩展列表,等同于a[len(a):]=(i,x)把单个元素插入到制定的元素。第一个参数是在列表中的索引。因此(0,x)意思是吧元素X插入到列表最前面,(len(a),x)等同于(x).(x)从列表中删除第一个值为x的元素,如果没这个元素将会出错。([i])删除指定位置的元素,并且返回该元素,如果没有指定的索引,()就会删除列表中最后一个元素,括号中的参数是可以选择的。(x)返回列表中第一个满足值为X元素的索引,如果没有该元素就会出错。(x)计算在列表中值为x的元素出现的次数。()对列表中的元素进行排序。e()吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农翻转列表中的元素。以下是调用list中各种方法的例子:>>>a=[66.25,333,333,1,1234.5]>>>print((333),(66.25),(’x’))210>>>(2,-1)>>>(333)>>>a[66.25,333,-1,333,1,1234.5,333]>>>(333)29PythonTutorial,Release3.2.31>>>(333)>>>a[66.25,-1,333,1,1234.5,333]>>>e()>>>a[333,1234.5,1,333,-1,66.25]>>>()>>>a[-1,1,66.25,333,333,1234.5]3.1.1把列表当做栈来用列表中的方法很容易实现把列表当做栈来用,在栈中元素师“后进先出”。给栈顶添加单个元素可以用方法append().从栈顶检索一个元素用不带参数方法pop(),例如:>>>stack=[3,4,5]>>>(6)>>>(7)吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>stack[3,4,5,6,7]>>>()7>>>stack[3,4,5,6]>>>()6>>>()5>>>stack[3,4]3.1.2把列表当做队列来用也可以把列表当做队列来用,在队列中元素是“先进先出”。但是列表当做队列用时效率不是很高。尽管在列表未添加和删除元素是很快的,但是从列表开头插入和删除数据时很慢的。(因为所有的数据都要逐个交换)为了实现队列,可以利用方法,它可以从两端进行快速地添加和删除。例如:>>>fromcollectionsimportdeque>>>queue=deque(["Eric","John","Michael"])>>>("Terry")#Terryarrives>>>("Graham")#Grahamarrives>>>t()#Thefirsttoarrivenowleaves’Eric’>>>t()#Thesecondtoarrivenowleaves第二个到达的现在离开’John’>>>queue#Remainingqueueinorderofarrival按到达次序排列的剩余队列deque([’Michael’,’Terry’,’Graham’])吐槽博客:/sxb第一个到达的现在离开

Python3.2.3官方文档翻译译者夜深人静后的码农3.1.3递推式构造列表递推式构造列表提供了一些简洁的方法来创建列表。通用程序可以创建新列表,在每个元素是一些对其他序列或迭代上每个元素操作后的结果,或者创建一个元素中满足特定条件的子序列。例如:假设我们想创建一个平方的列表,就像:>>>squares=[]>>>forxinrange(10):...(x**2)...>>>squares[0,1,4,9,16,25,36,49,64,81]我们可以用如下语句获得同样的结果squares=[x**2forxinrange(10)这也等同于squares=map(lambdax:x**2,range(10)),但是它更加简洁和可读。一个列表的综合应用常由包含for语句,接着零个或多个for或者if语句的方括号组成。结果将是一个满足表达式中for和if语句的新列表。例如:如下列表时结合两个不相等的列表。>>>[(x,y)forxin[1,2,3]foryin[3,1,4]ifx!=y][(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]等同于>>>combs=[]>>>forxin[1,2,3]:...foryin[3,1,4]:...ifx!=y:...((x,y))...>>>combs[(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]注意:在两个表达式中的for和if的次数应该相等。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>vec=[-4,-2,0,2,4]>>>#createanewlistwiththevaluesdoubled>>>[x*2forxinvec][-8,-4,0,4,8]>>>#filterthelisttoexcludenegativenumbers过滤列表中的负数>>>[xforxinvecifx>=0][0,2,4]>>>#applyafunctiontoalltheelements为所有元素调用方法>>>[abs(x)forxinvec][4,2,0,2,4]>>>#callamethodoneachelement为每个元素调用方法创建一个包含双倍数值的列表>>>freshfruit=[’banana’,’loganberry’,’passionfruit’]>>>[()forweaponinfreshfruit][’banana’,’loganberry’,’passionfruit’]去掉每个元素中首尾空格>>>#createalistof2-tupleslike(number,square)创建一个包含二位数组的列表>>>[(x,x**2)forxinrange(6)][(0,0),(1,1),(2,4),(3,9),(4,16),(5,25)]>>>#thetuplemustbeparenthesized,otherwiseanerrorisraised数据必须用括号括起来>>>[x,x**2forxinrange(6)]Lists31PythonTutorial,Release3.2.3File"",line1,in?[x,x**2forxinrange(6)]^SyntaxError:invalidsyntax>>>#flattenalistusingalistcompwithtwo’for’用两个for遍历出展开所有的列表元素>>>vec=[[1,2,3],[4,5,6],[7,8,9]]>>>[numforeleminvecfornuminelem][1,2,3,4,5,6,7,8,9]列表复合表达式可以获得更复杂的表达式和内嵌方法。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>frommathimportpi>>>[str(round(pi,i))foriinrange(1,6)][’3.1’,’3.14’,’3.142’,’3.1416’,’3.14159’]3.1.4嵌套列表推导式在列表推导式中初始表达式可以是任意表达式。包含其他的列表推导式。思考一下用长度为4的3个列表实现的3*4维的矩阵。>>>matrix=[...[1,2,3,4],...[5,6,7,8],...[9,10,11,12],...]用如下列表表达式就可以实现转换行列。>>>[[row[i]forrowinmatrix]foriinrange(4)][[1,5,9],[2,6,10],[3,7,11],[4,8,12]]正如上节我们看到的,潜逃列表可以用for语句来实现。因此上个例子也等同于:>>>transposed=[]>>>foriinrange(4):...([row[i]forrowinmatrix])...>>>transposed[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]也等同于:>>>transposed=[]>>>foriinrange(4):...transposed_row=[]...forrowinmatrix:...transposed_(row[i])...(transposed_row)吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农...>>>transposed[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]在现实生活中,你可能更喜欢用内置方法来实现复杂的流程控制。Zip()方法就是对这个例子就有很好的应用。>>>zip(*matrix)[(1,5,9),(2,6,10),(3,7,11),(4,8,12)]3.2删除语句Del删除语句能根据给定的索引而不是值从列表中快速的删除元素。它与能产生返回值的pop()方法不同。Del语句也可以从列表中删除数据段或者清空整个列表。例如:>>>a=[-1,1,66.25,333,333,1234.5]>>>dela[0]>>>a[1,66.25,333,333,1234.5]>>>dela[2:4]>>>a[1,66.25,1234.5]>>>dela[:]>>>a[]Del语句也可以删除整个变量。>>>dela以后对a引用就会出错。(至少直到它被重新赋值)。3.3元组和序列我们看到列表和字符串有许多相同的属性,例如索引和切片操作符。以下是两个关于序列数据类型的例子。由于python是一种不断演变的语言,其他的序列数据类型可以被添加。现在已经有一种标准的序列数据类型:元组一个元组是由一些被逗号分隔的熟知组成的。例如:吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>t=12345,54321,’hello!’>>>t[0]12345>>>t(12345,54321,’hello!’)>>>#元组也可以嵌套...u=t,(1,2,3,4,5)>>>u((12345,54321,’hello!’),(1,2,3,4,5))>>>#元组是不可变的...t[0]=88888Traceback(mostrecentcalllast):File"",line1,inTypeError:’tuple’objectdoesnotsupportitemassignment元组不支持元素赋值,>>>#buttheycancontainmutableobjects:但是可包含可变的对象。...v=([1,2,3],[3,2,1])>>>v([1,2,3],[3,2,1])正如你看到的,当输出时元组常常被括号括起来,因此嵌套元组可以被正确解释。尽管常在输入时候用括号把它们包围,但是包或不包含都可以输入。不可以对元组中的单个对象赋值,但是创建包含可变的对象的元组,比如列表。尽管元组与列表有点相似,但是常常在不同情况和因不同的目的而使用。元组是不可变的,常常包含一个可以通过取出和索引访问元素的异构序列。列表是可变的,并且这些元素都是平等的,只能通过遍历逐次访问。一个特殊的问题就是仅包含一个或空的元组的构建。为了符合这些规则,这语法有点特别之处。每个空元组可以被一对空括号所创建。含一个值的元组可以用一个值加上”,”进行创建。(用括号包围单个值没有意义)。尽管看起来很丑陋,但是很有效的。例如:>>>empty=()>>>singleton=’hello’,#<--notetrailingcomma>>>len(empty)吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农0>>>len(singleton)1>>>singleton(’hello’,)语句t=12345,54321,’hello!’是一个包含不同值的元组例子:值是12345,54321and’hello!’都放在同一个元组中。翻转元组的操作可以如下:>>>x,y,z=t序列拆封要求左侧的变量数目与序列的元素个数相同。要注意的是可变参数其实只是元组封装和序列拆封的一个结合!3.4Set集合Python还包含一个集合的数据类型。一个Set是一个不包含重复元素的无序集合。基本应用是成员资格测试和消除重复元素。Set对象也提供一些算术操作符,比如连接,交集,差值和堆成差。花括号或set()方法都可以用来创建集合。注意如果你想要创建一个空集合,必须要用set()而不能用{}。后者创建了一个空字典,空字典我们将在下一节讨论。对于集合的使用在这里做一简单示范:>>>basket={’apple’,’orange’,’apple’,’pear’,’orange’,’banana’}>>>print(basket)#showthatduplicateshavebeenremoved#显示除去重复元素{’orange’,’banana’,’pear’,’apple’}>>>’orange’inbasket#fastmembershiptesting#快速成员检测True>>>’crabgrass’inbasketFalse>>>#展示通过set操作从两个词中获得唯一的字母...吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>a=set(’abracadabra’)>>>b=set(’alacazam’)>>>a#uniquelettersina在a中唯一字母{’a’,’r’,’b’,’c’,’d’}>>>a-b#lettersinabutnotinb在a中但不在b中{’r’,’d’,’b’}>>>a|b#lettersineitheraorb在a或b中{’a’,’c’,’r’,’d’,’b’,’m’,’z’,’l’}>>>a&b#lettersinbothaandb在a且在b中{’a’,’c’}>>>a^b#lettersinaorbbutnotboth在a或在b中,但不同时在两者中{’r’,’d’,’b’,’m’,’z’,’l’}Likeforlists,thereisasetcomprehensionsyntax:像列表一样,集合也有“理解语法”。>>>a={xforxin’abracadabra’ifxnotin’abc’}>>>a{’r’,’d’}3.5字典定义在python中另一种数据类型是字典。其他语言中字典可能被定义为“组合记忆”或“组合数组”。不像序列能用数字可以索引,在字典中是任何一种不变类型的关键字keys来查询。字符串和数字是常见的关键字。如果元组中仅仅包含字符串,数组或者重数,那么元组也可以充当关键字。但是如果元组中直接或者间接包含可变的对象,那么元组就不能做关键字。你不能把列表用作关键字,因为列表在索引赋值,切片赋值以及方法append()和extend()运用时可以改变本身值。把字典认为是一对无序的key:value的对,并且关键字在一个字典中是唯一的是对字典非常正确的认识。可以用del方法来删除一对键值对。当你用一个已经存在的键去保存值时,吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农与其相关联的值将会丢弃。用没有存在的关键字去获得值时会出错。用字典中的方法list(())就可以获得包含字典中所有的关键字的列表,列表中的关键字是无序的,如果你想要对关键字进行排序,可以用方法sorted(()).可以用in关键字来检查单个关键字是否在字典中。如下是运用字典的一个简单例子:>>>tel={’jack’:4098,’sape’:4139}>>>tel[’guido’]=4127>>>tel{’sape’:4139,’guido’:4127,’jack’:4098}>>>tel[’jack’]4098>>>deltel[’sape’]>>>tel[’irv’]=4127>>>tel{’guido’:4127,’irv’:4127,’jack’:4098}>>>list(())[’irv’,’guido’,’jack’]>>>sorted(())[’guido’,’irv’,’jack’]>>>’guido’intelTrue>>>’jack’notintelFalse在字典中可以用dict()构造方法直接直接从包含key-vlaue的序列中定义一个字典。>>>dict([(’sape’,4139),(’guido’,4127),(’jack’,4098)]){’sape’:4139,’jack’:4098,’guido’:4127}此外,字典利用复合表达式从随机的key和value的表达式中来创建字典。>>>{x:x**2forxin(2,4,6)}{2:4,4:16,6:36}当关键字是简单的字符串时,可以用关键字参数直接指定对象,这样有时会更加的容易。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>dict(sape=4139,guido=4127,jack=4098){’sape’:4139,’jack’:4098,’guido’:4127}3.6遍历技巧当通过字典遍历数据时,用items()方法就可以同时把关键字和相对应的值从字典中取出。>>>knights={’gallahad’:’thepure’,’robin’:’thebrave’}>>>fork,():...print(k,v)...gallahadthepurerobinthebrave当用序列遍历数据时,用enumerate()可以同时把位置索引和对应的值得到。>>>fori,vinenumerate([’tic’,’tac’,’toe’]):...print(i,v)...0tic1tac2toe想要同时遍历两个或多个序列时,可以用方法zip()把属性整合起来。>>>questions=[’name’,’quest’,’favoritecolor’]>>>answers=[’lancelot’,’theholygrail’,’blue’]>>>forq,ainzip(questions,answers):...print(’Whatisyour{0}?Itis{1}.’.format(q,a))...Whatisyourname?yourquest?yourfavoritecolor?Itisblue.想要倒叙遍历序列,首先正序指定遍历序列,然后调用方法reversed().吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农>>>foriinreversed(range(1,10,2)):...print(i)...97531想要有序的遍历列表,用方法sorted()可以返回一个新的有序列表而不改变原先列表。>>>basket=[’apple’,’orange’,’apple’,’pear’,’orange’,’banana’]>>>forfinsorted(set(basket)):...print(f)...applebananaorangePear3.7深入条件控制在while和if语句中用到的条件可以包含任何操作符而不仅仅是比较运算符。比较运算操作符in和notin主要检查值是否在列表中出现(或不出现)。操作符is和isnot用来比较两个对象是不是真正相同的对象。这仅仅用于可变对象如列表。所有的比较运算法拥有同样的优先级,但都比数字操作符的优先级低。比较运算法可以连接使用,例如:a

Python3.2.3官方文档翻译译者夜深人静后的码农就停止。例如如果A和C是真的但是B是假的,AandBandC不能判定表达式C,当短路操作符返回值作为普通值而不是布尔值使用时,则返回值是最后一个被判定的表达式。可以允许把比较运算符或者其他布尔表达式的结果赋值给一个变量。例如:>>>string1,string2,string3=’’,’Trondheim’,’HammerDance’>>>non_null=string1orstring2orstring3>>>non_null’Trondheim’注意在python中不像C语言,赋值操作不能出现在表达式中。C程序员可能会对此抱怨,但是它避免了一个在C程序中经常遇到的典型的问题。想要在一个表达式中使用==操作时确输入了=。第四章模块如果你退出python的解释器重新进入,则有关你已定义的方法和变量都会消失。因此,如果你想编写比较长的程序,你最好用文本编辑器来为解释器准备输入和用文件作为输入来运行程序。这就是众所周知的脚本。如果你的程序更强大而负责,你可能为了方便维护想把它分为几个文件。可能你想用你已写在文件中的便利方法而不需要把它拷贝到每个程序中。为了支持这个功能,Python提供一种方法把这些定义放置一个文件中,可以在脚本或者解释器的相互交互实例中运用他们。在python中这样的文件叫做模块。在模块中的定义可以直接导入到其他模块或者main模块中。(你在顶层进入执行脚本或计算模式下的变量的集合)一个模块是包含python定义和语句的文件。文件名称是由模块名加上后缀名.py组成的。在模块中,模块的名字(可以作为一个字符串)是一个作为全局变量_name_的值的变量。例如,用你最喜欢的文本编辑器在当前目录下创建一个名叫的文件。文件内容如下:吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农deffib(n):#writeFibonacciseriesuptona,b=0,1whileb>>importfibo这不允许进入当前符号表中直接定义在fibo的方法名。这只能进入名为fibo的模块中。用模块名字你可以访问方法。>>>(4233377610987>>>2(100)[1,1,2,3,5,8,13,21,34,55,89]>>>fibo.__name__’fibo’39如果你使用该方法,常常把它赋于一个本地名字>>>fib=>>>fib(500)45589144233377吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农4.1深入模块一个模块可以包含可执行语句和方法定义。这些语句用来初始化模块。当模块第一次被导入到其他地方时候这些语句将会执行。每个模块都有自己私有的符号表,定义在模块内的所有方法可以把它当做全局符号表来用。因此,模块的作者可以在模块中用全局变量而不同担心与用户全局变量的意外冲突。另一方面,如果你确切地知道自己在做什么,你可以使用引用模块函数的表示法访问模块的全局变量。e.模块中可以导入其他模块。习惯上把所有的import语句放在一个模块的开始位置,但这不是强制的。导入的模块名称将会在放在正在导入模块的符号表中。例如:还有一种import语句的变体,可以从一个模块中将名字直接导入到当前模块的符号表中。>>>fromfiboimportfib,fib2>>>fib(500)45589144233377这种方式不会把模块名字放在本地符号表中。(例如,fibo是没有定义的)还有一种导入所有定义模块的名称的变体>>>fromfiboimport*>>>fib(500)45589144233377这种方式会导入除以下划线_开始之外的开头所有名称。在许多情况下,python开发者不会用这种工具。因为它会在解释器中引入一些未知的名称集合,有可能隐藏一些你已经定义的方法。注意,一般而言,从模块或者包中import*这种做法是不赞成的,因为它常常影响代码的可读性。但是,你可以用它来保存在交互session中的输入注意:为了效率,在每一个解释会话中每个模块只能允许导入一次。因此,如果你修改你的模块,你必须重启python解释器。Or仅仅是一个你想交互测试的模块,你可以用方法(),eg,importimp;(moduleName);吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农4.1.1像脚本一样执行python当用如下方法运行一个python脚本,在python中的代码将会被执行,就像你导入一样。但是方法”_name_”将会被设置为”_mian_”.这就意外着可以再你的模块末尾将会添加如下方法:if__name__=="__main__":importsysfib(int([1]))你可以在导入的模块中像脚本一样运行python代码,因为这些命令解析的代码仅当模块被当做主文件执行时会被运行。$54如果仅仅是导入,代码不会执行。>>>importfibo>>>这种方法常用来提供一个便利的用户接口给一个模块,或者为了测试的需要。4.1.2模块的搜索路径当一个名叫spam的模块导入时,解释器首先会用这个名称在内置模块中寻找。如果没有发现,它会给定的路径下的目录中查找的文件。在如下位置被初始化:包含输入脚本的目录或当前目录PYTHONPATH,(目录名称的列表,相当于shell变量的path)安装的默认路径初始化后Python程序就会修改.包含正在运行脚本的目录常放在查找路径的开始。在标准库路径的前面。这就意外着在这个路径下的脚本不应该与库文件具有相同的名称。否则当导入一个模块时候python将会把脚本当做模块加载,这通常会导致一个错误。吐槽博客:/sxb

Python3.2.3官方文档翻译译者夜深人静后的码农4.1.3编译python文件作为一个为使用大量标准模块的小程序启动时间加速的重要方式,如果在所在的目录存在一个名为的文件,这被认为是模块spamd的字节码预编译的版本。创建时文件的修改时间版本会被记录在文件中。如果这两者不一致,那么.pyc文件就会忽略。通常你无需要自行创建文件,每次成功编译后,都厚尝试将编译的版本写入文件中。如果尝试写入失败后,也不会引发什么错误。不论什么错误。文件的内容是平台无关的,所以一个python模块目录可以被不同体系架构的机器共享。4.2标准接口Python自带一些标准模块的库文件。这些库文件介绍在单独的文档(python库文件介绍)中有所描述。一些模块在解释器中创建,它们提供了对非语言核心的但又为了效率又不得包含到里面部分的操作方法,或者是提供了对操作系统的底层的访问,例如系统调用。这些模块ge会根基底层平台进行不同的选择配置,比如:winreg模块只能在window系统上提供,另一个特殊模块更值得注意,sys,它内置在每个python解释器中,变量1和2定义了主提示符和此提示符使用的字符串。>>>importsys>>>1’>>>’>>>2’...’>>>1=’C>’C>print(’Yuck!’)Yuck!C>只有当解释器处于交互模式时候,这两个变量才能被定义。变量是一系统决定在解释器搜索模块路径的字符串列表。它从默认的环境变量pythonPATH或者当PYTHONPATH为空时候从内置的默认路径进行初始化。你可以用标准吐槽博客:/sxb

Python3.2.3官方文档(中文版)

本文发布于:2024-01-31 18:39:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669754430550.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:方法   列表   模块   字符串
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23