博学谷——让IT教学更简单,让IT学习更有效1编码风格使用4空格缩进,而非TAB。在小缩进(可以嵌套更深)和大缩进(更易读)之间,4空格是一个很好的折中。TAB引发了一些混乱,最好弃用。折行以确保其不会超过79个字符。这有助于小显示器用户阅读,也可以让大显示器能并排显示几个代码文件。使用空行分隔函数和类,以及函数中的大块代码。可能的话,注释独占一行。使用文档字符串。把空格放到操作符两边,以及逗号后面,但是括号里侧不加空格:a=f(1,2)+g(3,4)统一函数和类命名。总是用self作为方法的第一个参数。字符串利用三引号(’’’)或(”””)可以指示一个多行的字符串,在里面可以随便使用单引号和双引号。它也是文档字符串DocStringsdefdoc():'''HiHi'''passprintdoc.__doc__HiHi博学谷——让IT教学更简单,让IT学习更有效2文档字符串第一行应该是关于对象用途的简介。如果文档字符串有多行,第二行应该空出来,与接下来的详细描述明确分离。转义符:'what\'sup'等价于what'sup\\表示反斜杠本身行末单独的一个\表示在下一行继续,而不是新的一行:'aaaaa\dddd'等价于'aaaaadddd'原始字符串r如果我们生成一个“---原始”字符串,\n序列不会被转义,而且行尾的反斜杠,源码中的换行符,都成为字符串中的一部分数据。hello=rThisisaratherlongstringcontaining\n\serverallinesoftextmuchasyouwoulddoinC.printhelloThisisaratherlongstringcontaining\n\serverallinesoftextmuchasyouwoulddoinC.hello=Thisisaratherlongstringcontaining\n\serverallinesoftextmuchasyouwoulddoinC.printhelloThisisaratherlongstringcontainingserverallinesoftextmuchasyouwoulddoinC原始字符串的最后一个字符不能是“\”,如果想要让字符串以单“\”结尾,可博学谷——让IT教学更简单,让IT学习更有效3以这样:printr'ee''\\'ee\如果是printr'ee\'则会返回错误;如果是printr'ee\\'则会返回ee\\字符串可以由+操作符连接,可以由*操作符重复。相邻的两个字符串文本自动连接在一起,它只用于两个字符串文本,不能用于字符串表达式。'str'.strip()'str''str''jkl''strjkl''str'.strip()'jkl'SyntaxError:invalidsyntax'str'.strip()+'jjj''strjjj'字符串不可变,向字符串文本的某一个索引赋值会引发错误。不过,组合文本内容生成一个新文本简单而高效。word='thank'word[0]'t'word[0]='f'Traceback(mostrecentcalllast):博学谷——让IT教学更简单,让IT学习更有效4Filepyshell#10,line1,inmoduleword[0]='f'TypeError:'str'objectdoesnotsupportitemassignmentword[:4]+'g''thang'切片操作有个有用的不变性:i[:s]+i[s:]等于i。word[:4]+word[4:]'thank'值被转换为字符串的两种机制:str、reprstr函数:把值转换为合理形式的字符串repr:创建一个字符串,以合法的Python表达式的形式来表示值printrepr('hello,world!')'hello,world!'printstr('hello,world!')hello,world!printrepr('1000L')'1000L'printstr('1000L')1000Linput与raw_input:raw_input('e:')e:a博学谷——让IT教学更简单,让IT学习更有效5'a'input('e:')e:aTraceback(mostrecentcalllast):Filepyshell#26,line1,inmoduleinput('e:')Filestring,line1,inmoduleNameError:name'a'isnotdefinedinput('e:')e:'a''a'a=raw_input('e:')e:123type(a)type'str'b=input('e:')e:123.01type(b)type'float'raw_input('e:')e:1+2博学谷——让IT教学更简单,让IT学习更有效6'1+2'input('e:')e:1+23由上面的例子可以知道,两个函数均能接收字符串,区别是raw_input()直接读取控制台的输入(任何类型的输入它都可以接收),而input()在接收字符串的时候需要加上引号,否则会引发错误。此外,在接收纯数字方面,input()具有自己的特性,并不是像raw_input()一样把所有输入都当做字符串看待。除此之外,input()会接收合法的python表达式1+2返回int型的3。字符串大小写变换:lower()小写upper()大写swapcase()大小写互换capitalize()首字符大写title()只有首字符大写,其余为小写。用于转换字符串为标题:'that\'sall,folks'.title()That'SAll,Folksstring模块的capwords函数:importstringstring.capwords('that\'sall,folks')That'sAll,folks字符串在输出时候的对齐:ljust(width,[fillchar]):左对齐,输出width个字符,不足部分用filchar补足,默认的为空格。博学谷——让IT教学更简单,让IT学习更有效7rjust(width,[fillchar]):右对齐。center(width,[fillchar]):中间对齐。zfill(width):把字符串变成width长,并在右对齐,不足部分用0补足。string.capwords('what\'sall,forks.').ljust(20)What'sAll,forks.string.capwords('what\'sall,forks.').rjust(20)What'sAll,forks.string.capwords('what\'sall,forks.').center(40)What'sAll,forks.string.capwords('what\'sall,forks.').zfill(20)000What'sAll,forks.字符串中的搜索和替换及其他常用方法:find(subsrt,[start,[end]]):返回字符串中第一个出现substr的第一个字母的标号,如果没有subser则返回-1。start和end的作用相当于在[start:end]中搜索。'srrrtripoopp'.find('trip',-1,-4)-1'srrrtripoopp'.find('trip')4index(subsrt,[start,[end]]):与find一样,只是在字符串中没有substr时,会返回一个运行时错误。rfind(subsrt,[start,[end]]):返回字符串中最后出现substr的第一个字母的标号,如果字符串中没有substr,返回-1.博学谷——让IT教学更简单,让IT学习更有效8rindex(subsrt,[start,[end]])。count(subsrt,[start,[end]]):计算substr在字符串中出现的次数。replace(oldstr,newstr,[count]):把字符串中的oldstr替换为newstr,count为替换的次数。strip([char]):把字符串中前后有char的字符全部去掉,默认去掉空格:'aabb'.strip()'aabb''***aaa*bbb*!***'.strip('*')'aaa*bbb*!'当然还有lstrip([char])、rstrip([char]):'tsssssttt'.lstrip('t')'sssssttt''tsssssttt'.rstrip('t')'tsssss'join方法用来在队列中添加元素,但需要添加的队列元素都必须是字符串:seq=[1,2,3,4,5]sep='+'sep.join(seq)#连接数字列表Traceback(mostrecentcalllast):Filepyshell#38,line1,inmodule博学谷——让IT教学更简单,让IT学习更有效9sep.join(seq)TypeError:sequenceitem0:expectedstring,intfoundseq=['1','2','3','4','5']#连接字符串列表sep.join(seq)'1+2+3+4+5'dirs='','usr','bin','eno''/'.join(dirs)'/usr/bin/eno'print'C:'+'\'.join(dirs)#注意\的转义问题SyntaxError:EOLwhilescanningstringliteralprint'C:'+'\\'.join(dirs)C:\usr\bin\enosplit方法用来将字符串分割成序列:'/usr/bin/env'.split('/')['','usr','bin','env']如果不提供任何分隔符,程序会把所有空格作为分隔符:'Usingthedefault'.split()['Using','the','default']translate方法也是替换字符串中的的某些部分,但只处理单个字符。它的优势在于可以同时进行多个替换,有些时候比replace效率高的多。使用translate转换之前,需要完成一张转换表,通过string模块里的maketrans函数完成。maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串中的每个字博学谷——让IT教学更简单,让IT学习更有效10符都用第二个字符串中的相同位置的字符替换:fromstringimportmaketranstable=maketrans('cs','kz')len(table)256#转换表是包含替换ASCⅡ字符集中256个字符的替换字符的字符串table[97:123]'abkdefghijklmnopqrztuvwxyz'translate的第二个参数是可选的,用来指定要删除的字符:'kzcddsdffg'.translate(table,'f')'kzkddzdg'字符串格式化:%操作符左侧放置一个需要格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都可以以%开始。如果需要在格式化字符串里面包括百分号,那么必须使用%%。%右边放置一个或者多个对象,这些对象将会插入到左边想进行格式化字符串的一个或者多个转换目标位置上。如果要格式化实数(浮点数),可以使用f说明符类型,同时提供所需要的精度:一个句点再加上希望所保留的小数位数。因为格式化说明符总是