二、python字符串操作符
1. 对象标准类型操作符
Python对象的标准类型操作符一共就三种:对象值的比较、对象身份的比较、布尔类型。其中对象值的比较主要是大于、小于、不等于等的数学比较符;对象身份的比较主要是is和is not这两个符号;布尔类型主要是not、and、or等的逻辑运算符。
字符串标准类型操作符也是这些,在做比较操作的时候,字符串是按照ASCII值的大小来比较的。
2. 序列类型操作符
切片操作符
主要分为三种,分别是正向索引、反向索引、默认索引。下图中显示索引的编号:
注意:起始/结束索引都没有指定的话会返回整个字符串,索引值指定为None,也会返回到字符串的开始或者结尾。
成员操作符
in或者not in。成员操作符判断一个字符或者一个子串是否是另一个字符串的一部分,出现则返回True,否则返回False。
写一个脚本idcheck.py,用来检测python变量。提示一些知识点:
>>> import string >>> string.uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.lowercase 'abcdefghijklmnopqrstuvwxyz' >>> string.letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.digits '0123456789'
这里假设python变量至少由两个字符组成。
代码实现:
#! /usr/bin/python import string alphas = string.letters + '_' nums = string.digits print 'Welcome to the Identifier Checker v1.0' print 'Python variables must be at least 2 chars long' myInp = raw_input('Identifier to test? ') if len(myInp) > 1: if myInp[0] not in alphas: print 'invalid: first symbol must be alphabetic' else: for otherChar in myInp[1:]: if otherChar not in alphas + nums: print 'invalid: remaining symbols must be alphabetic' break else: print 'okay as an Identifier' else: print 'invalid: python variables must be at least 2 chars long'
这里每次在循环的时候,都要用加号(+)字符串连接符,要开辟新的存储空间,所以效率很低。好的改进方案:
alphanums = alphas + nums for otherChar in myInp[1:]: if otherChar not in alphanums:
还有就是for-else循环语句,这个else语句只在for循环完整结束,没有遇到break时执行。
连接符(+)
通过连接操作符从原有字符串获得一个新的字符串。
>>> s = 'Spanish Inquisition Made Easy' >>> import string >>> string.upper(s[:3] + s[20]) 'SPAM'
上面的方法存在性能上的问题,因为python必须为每一个参加连接操作的字符串分配新的内存,包括产生的新的字符串。所以这里推荐使用字符串格式化操作符(%),或者把所有的字符串放到一个类表中,然后用一个join()方法把他们连接在一起。
>>> '%s %s' % ('Spanish', 'Inquisition') 'Spanish Inquisition' >>> s = ' '.join(('Spanish', 'Inquisition', 'Made Easy')) >>> s 'Spanish Inquisition Made Easy' >>> ('%s%s' % (s[:3], s[20])).upper() 'SPAM'
普通字符串转化为Unicode字符串
如果把一个普通字符串和一个Unicode字符串做连接处理,python自动会在连接操作前把普通字符串转化为Unicode字符串。
>>> 'Hello' + u' ' + 'World' +u'!' u'Hello World!'
3. 只适用于字符串的操作符
格式化操作符
python风格的字符串格式化操作符,只适用于字符串类型,非常类似C语言里面的printf函数的字符串格式化。
python支持两个格式的输入参数。第一种形式是元组,第二种形式是字典类型。
先看一些字符串格式化符号和格式化操作符辅助命令:
看一些具体的例子:
>>> '%x' % 108 '6c' >>> '%X' % 108 '6C' >>> '%#x' % 108 '0x6c' >>> '%f' % 1234.567890 '1234.567890' >>> '%.2f' % 1234.567890 '1234.57' >>> '%e' % 1234.567890 '1.234568e+03' >>> >>> '%+d' % 4 '+4' >>> '%+d' % -4 '-4' >>> 'we are at %d%%' % 100 'we are at 100%' >>> 'Host: %s Port: %d' % ('mars',80) 'Host: mars Port: 80' >>> 'MM/DD/YY = %02d/%02d/%d' % (2, 15, 67) 'MM/DD/YY = 02/15/67'
上面的例子用到的是元组作为输入参数,下面看一个字典类型的输入参数:
>>> 'There are %(howmany)d %(lang)s Quotation Symbols' % {'lang':'Python', 'howmany':3} 'There are 3 Python Quotation Symbols'