之前讲到,字符串的定义就是把一些字符序列用引号引起来。例如:
上面这行代码的执行过程:先创建一个字符串对象,并初始化里面字符串的值为'a', 'b', 'c'的序列,再把指针s指向这个对象。如下图所示:
我们知道字符串内部是一个字符序列。作为序列,我们可以用下标来索引。例如:
还可以从字符序列的末尾开始索引,-1代表最后一个字符,-2代表倒数第二个字符,... 例如:
另外字符串还支持切片(slice)操作,取出给定两个下标之间的字符序列(包括开始下标的字符,但不包括结束下标的字符。用数学区间的[a:b)来描述是不是更清楚点呢)。例如:
这一点很像verilog的位宽操作,例如:reg s[7:0] = 8'h5a,那我们可以c = s[3:0]来取出3到0位的4'ha。只是verilog是闭区间的。
在切片时,当开始下标是0,冒号前的下标可以省略;结束下标指向最后一个元素,冒号后的下标也可省略。所以上面的切片可以简化成:
当开始下标和结束下标都省略时,s[:]表示整个字符序列'abc'。
注意理解 s[1:-1]和s[1:]的区别,前者不包括最后一个字符,而后者包括。
作为字符序列,还支持拼接和重复操作。例如:
另外我们要注意字符序列的只读性。我们不可以对字符赋值,s[0] = 'd'是非法的。但我们可以迂回:
但要注意,第二句并不是简单的修改s对象的元素值,而是用拼接产生了一个全新对象,并让s指向新的对象。
除了序列操作外,字符串本身作为一种类,自带了很多操作函数(类的方法)。下表列出了一些常用的操作:
position = index(substr, begin=0, end=len(string))
position = find(substr, begin=0, end=len(string))
描述:index和find函数的作用相同,都是查找子字符串。可以指定开始和结束索引,在一个范围内查找。
返回值:子字符串的起始索引值。index和find的区别是,当没有找到子字符串时,index报错,而find返回-1。
例如:
str_new = replace(substr_old, substr_new[, max])
描述:替换函数,如其名,查找子字符串substr_old
,替换成substr_new
。第三个参数是可选的,指定替换的最大次数,默认是全部替换。
返回值:返回替换后的新字符串。
例如:
list = split(str=' ', num)
描述:split函数用分隔字符str把字符串拆分成若干个子字符串。num指定拆分多少次,若没有指定次数,则为全部拆分。
返回值:拆分后的子字符串列表(下一次我们将要学习列表)。
例如:
str_new = upper()
str_new = lower()
描述:把字符串转成大写或小写。
返回值:大小写转换后的新字符串。
例如:
str_new = strip(char=' ')
str_new = rstrip(char=' ')
str_new = lstrip(char=' ')
描述:strip函数用来去除头或尾部的指定字符,默认是去掉空格。
返回值:返回处理后的新字符串。
例如:
boolean = startswith(str, begin=0, end=len(string))
boolean = endswith(str, begin=0, end=len(string))
描述:检查字符串是否以str开头或结尾,可以在指定范围内检查。
返回值:如果检查到,返回True,否则返回False。
例如:
str_new = '{}{}...'.format(arg1, arg2, ...)
描述:format用来把其它数字、字符串、甚至对象等格式化成字符串。大括号{}用来指定名称、位置、数字的格式等。
返回值:格式化后的新字符串。
例如:
第一种,按名称替换。
第二种,按位置替换。
第三种,默认按位置替换,也是最常见的替换方式。
是不是有点像verilog的模块例化?可以按名称,也可以按位置。
format数字格式化
数字格式化成字符串的规则如下表:
例如:
format格式定义详见:
https://docs.python.org/3/library/string.html#formatspec
可能有童鞋要问了“字符串内置这么多函数,一下也记不住啊?” 所以下面内容非常重要(敲黑板)。
怎么看string还内置其它什么函数?
dir()
是一个内置函数,能够查看类的所有属性和方法。结果如下:
那怎么查看具体函数的使用方法呢?
python已经考虑到这个问题了,不需要百度、不需要查看源代码,只需要调用help()
函数。例如:
将打印出下面的内容:
有没有被python的贴心功能感动呢?
下一次我们将学习python的列表。