![]() |
|
||||||
>>> s = 'abcdefgh'
>>> s[::-1] # 可以视作"翻转"操作 'hgfedcba' >>> s[::2] # 隔一个取一个的操作 'aceg' ----------------------------------------------------------------- 表 6.2 序列类型转换工厂函数 函数 含义 list(iter) 把可迭代对象转换为列表 str(obj) 把 obj 对象转换成字符串(对象的字符串表示法) unicode(obj) 把对象转换成 Unicode 字符串(使用默认编码) basestring() 抽象工厂函数,其作用仅仅是为 str 和 unicode 函数提供父类,所以不能被 实例化,也不能被调用(详见第 6.2 节) tuple(iter) 把一个可迭代对象转换成一个元组对象 ----------------------------------------------------------------- 表 6.3 序列类型可用的内建函数 函数名 功能 enumerate(iter) a 接受一个可迭代对象作为参数,返回一个 enumerate 对象(同 时也是一个迭代器),该对象生成由 iter 每个元素的 index 值 和 item 值组成的元组(PEP 279) len(seq) 返回 seq 的长度 max(iter,key=None) or max(arg0,arg1...,key=None) b 返回iter或(arg0,arg1,...)中的最大值, 如果指定了key, 这个key必须是一个可以传给sort()方法的,用于比较的回 调函数. min(iter, key=None) or min(arg0, arg1.... key=None) b 返回 iter 里面的最小值;或者返回(arg0,arg2,...)里面的最小值;如果指定了 key,这个 key 必须是一个可以传给 sort()方法的,用于比较的回调函数. reversed(seq) c 接受一个序列作为参数,返回一个以逆序访问的迭代器(PEP 322) sorted(iter, func=None, key=None, reverse=False)c 接受一个可迭代对象作为参数,返回一个有序的列表;可选参数 func,key 和 reverse 的含义跟 list.sort()内建函数的参数含义一 样. sum(seq, init=0) a 返回 seq 和可选参数 init 的总和,其效果等同于 reduce(operator.add,seq,init) zip([it0, it1,... itN]) d 返回一个列表,其第一个元素是 it0,it1,...这些元素的第 一个元素组成的一个元组,第二个...,类推. ================================================================ string模块 >>> string.digits '0123456789' >>> string.ascii_uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.ascii_lowercase 'abcdefghijklmnopqrstuvwxyz' >>> string.uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.lowercase 'abcdefghijklmnopqrstuvwxyz' >>> s = ' '.join(('Spanish', 'Inquisition', 'Made Easy')) #这样比+更有效率 >>> s 'Spanish Inquisition Made Easy' =============================================================================== 表 6.4 字符串格式化符号 格式化字符 转换方式 %c 转换成字符(ASCII 码值,或者长度为一的字符串) %r a 优先用 repr()函数进行字符串转换 %s 优先用 str()函数进行字符串转换 %d / %i 转成有符号十进制数 %u b 转成无符号十进制数 %o b 转成无符号八进制数 %xb /%X b (Unsigned)转成无符号十六进制数(x/X代表转换后的十六进制字符的大 小写) %e/%E 转成科学计数法(e/E 控制输出 e/E) %f/%F 转成浮点数(小数部分自然截断) %g/%G %e 和%f/%E 和%F 的简写 %% 输出% ------------------------------------------------------------------------- 表 6.5 格式化操作符辅助指令 符号 作用 * 定义宽度或者小数点精度 - 用做左对齐 + 在正数前面显示加号( + ) <sp> 在正数前面显示空格 # 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于 用的是'x'还是'X') 0 显示的数字前面填充‘0’而不是默认的空格 % '%%'输出一个单一的'%' (var) 映射变量(字典参数) m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) 以下是一些使用格式字符串的例子: 十六进制输出: >>> "%x" % 108 '6c' >>> >>> "%X" % 108 '6C' >>> >>> "%#X" % 108 '0X6C' >>> >>> "%#x" % 108 '0x6c' 浮点数和科学记数法形式输出: >>> >>> '%f' % 1234.567890 '1234.567890' >>> >>> '%.2f' % 1234.567890 '1234.57' >>> >>> '%E' % 1234.567890 '1.234568E+03' >>> >>> '%e' % 1234.567890 '1.234568e+03' >>> >>> '%g' % 1234.567890 '1234.57' >>> >>> '%G' % 1234.567890 '1234.57' >>> >>> "%e" % (1111111111111111111111L) '1.111111e+21' 整数和字符串输出: >>> "%+d" % 4 '+4' >>> >>> "%+d" % -4 '-4' >>> >>> "we are at %d%%" % 100 'we are at 100%' >>> >>> 'Your host is: %s' % 'earth' 'Your host is: earth' >>> Edit By Vheavens Edit By Vheavens >>> 'Host: %s\tPort: %d' % ('mars', 80) 'Host: mars Port: 80' >>> >>> num = 123 >>> 'dec: %d/oct: %#o/hex: %#X' % (num, num, num) 'dec: 123/oct: 0173/hex: 0X7B' >>> >>> "MM/DD/YY = %02d/%02d/%d" % (2, 15, 67) 'MM/DD/YY = 02/15/67' >>> >>> w, p = 'Web', 'page' >>> 'http://xxx.yyy.zzz/%s/%s.html' % (w, p) 'http://xxx.yyy.zzz/Web/page.html' 上面的例子都是使用的元组类型的参数作转换.下面我们将把字典类型的参数提供给格式 化操作符. >>> 'There are %(howmany)d %(lang)s Quotation Symbols' % \ ... {'lang': 'Python', 'howmany': 3} 'There are 3 Python Quotation Symbols' ===================================================================== 6.4.2 字符串模板: 更简单的替代品 字符串格式化操作符是 Python 里面处理这类问题的主要手段,而且以后也是如此。然而它 也不是完美的,其中的一个缺点是它不是那么直观,尤其对刚从 C/C++转过来的 Python 新手来 说更是如此,即使是现在使用字典形式转换的程序员也会偶尔出现遗漏转换类型符号的错误, 比如说,用了%(lang)而不是正确的%(lang)s.为了保证字符串被正确的转换,程序员必须明确 的记住转换类型参数,比如到底是要转成字符串,整数还是其他什么类型. 新式的字符串模板的优势是不用去记住所有的相关细节的,而是像现在 shell 风格的脚本 语言里面那样使用美元符号($). 由于新式的字符串 Template 对象的引进使得 string 模块又重新活了过来,Template 对象 有两个方法,substitute()和safe_substitute().前者更为严谨,在key缺少的情况下它会报一 个 KeyError 的异常出来,而后者在缺少 key 时,直接原封不动的把字符串显示出来. >>> from string import Template >>> s = Template('There are ${howmany} ${lang} Quotation Symbols') >>> >>> print s.substitute(lang='Python', howmany=3) There are 3 Python Quotation Symbols >>> >>> print s.substitute(lang='Python') Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/local/lib/python2.4/string.py", line 172, in substitute return self.pattern.sub(convert, self.template) File "/usr/local/lib/python2.4/string.py", line 162, in convert val = mapping[named] KeyError: 'howmany' >>> >>> print s.safe_substitute(lang='Python') There are ${howmany} Python Quotation Symbols ======================================================================== 6.4.3 原始字符串操作符( r/R ) 关于原始字符串的目的,在 Python1.5 里面已经有说明,是为了对付那些在字符串中出现 的特殊字符(下面的小节会介绍这些特殊字符)。在原始字符串里,所有的字符都是直接按照字 面的意思来使用,没有转义特殊或不能打印的字符。 ------------------------------------------------------------------------------ |
|||||||
|
|||||||
| 一事无成,迷惘的生活,生活不迷茫还能怎么清醒? |
| 重读PYTHON核心编程(第2版)-------第5天 < 上一篇 | 下一篇 > 重读PYTHON核心编程(第2版)-------第3天 |
用户回复
