字符串是 Python 中最常用的数据类型。我们可以使用单引号 ( '' ) 或双引号 ( " " ) 来创建字符串。
在python中,创建变量不需要指定类型,你在创建变量赋值时,python解释器会自动推断变量的数据类型
1 >>> s = 'abcde'
2 >>> type(s)
3 <class 'str'> #这里把多种数据类型的值赋值给s,python都能自动识别
4 >>> s = 123
5 >>> type(s)
6 <class 'int'>
7 >>> s = [1,2,'a',3]
8 >>> type(s)
9 <class 'list'>
10 >>> s = {'name':'root'}
11 >>> type(s)
12 <class 'dict'>
13 >>> s = {1,3,'a','abd'}
14 >>> type(s)
15 <class 'set'>
16 >>> #注意: 在python中,空字符串为假. eg: s = '' , if not s:print('hello') => hello
在python中,不支持单字符类型,python中的单字符也是作为字符串来处理
在python中,因为字符串是一个有序的序列,所以支持索引、切片等操作(用切片可以获取子串)
1 >>> s = 'a' 2 >>> type(s) 3 <class 'str'> #python中单字符也是字符串 4 >>> s = 'abcde' 5 >>> s[0:3] #字符串可以切片,获取子串 6 'abc' 7 >>> s[1] #字符串可以索引 8 'b' 9 >>> 'bc' in s #字符串支持 in 、not in 操作 10 True 11 >>> for i in s: #字符串可以循环 12 print(i) 13 14 15 a 16 b 17 c 18 d 19 e 20 >>>
在python中,为了防止每次创建基础变量,如字符串、数字等,都要申请开辟内存,所以python专门有个内存池,存放有常用的数字(一般是[-5,256],还有就是在当前代码块中,若两个对象的值相等,那么在第一个对象申请内存后,第二个对象会直接代用那块内存,不会再重新申请内存)、字符串(若字符串中没有空格,两个相同字符串的内存是一样的。若存在空格,那么就会重新申请内存)等。所以在python中,数字、字符串等数据类型是'不可更改的'。
重新赋值(更改)就相当于把变量名指向了内存中的另一块内存。
1 >>> s = 'abc def wsx asd hello'
2 >>> id(s)
3 3063291967504
4 >>> s1 = s.replace(' def','xxx')
5 >>> s
6 'abc def wsx asd hello'
7 >>> s1
8 'abcxxx wsx asd hello' #字符串本身不能更改,重新赋值(更改)就相当于指向另一块内存
9 >>> id(s1)
10 3063291967720
11 >>> i = 10
12 >>> id(i)
13 1554097536
14 >>> i = 20 #数字不能重新赋值(更改),重新更改就相当于指向令一块内存
15 >>> id(i)
16 1554097856
17 >>>
所以在python中,更新字符串,就必须重新开辟内存空间
1 >>> s = 'hello Tom' 2 >>> s1 = s[:6]+'Lucy' #更新字符串,不推荐在拼接字符串时用'+','*'表示重复输出字符串,eg: 'abc'*3 --> 'abcabcabc' 3 >>> s1 4 'hello Lucy' 5 >>> id(s) 6 3063306041456 7 >>> id(s1) 8 3063306041392 9 >>>
在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。如下表:
| \(在行尾时) | 续行符 |
| \\ | 反斜杠符号 |
| \' | 单引号 |
| \" | 双引号 |
| \a | 响铃 |
| \b | 退格(Backspace) |
| \e | 转义 |
| \000 | 空 |
| \n | 换行 |
| \v | 纵向制表符 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
| \oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
| \xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
| \other | 其它的字符以普通格式输出 |
注意,在字符串前面加 r/R 表示打印原始字符串。即所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
字符串的格式化:
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
1 >>> s = 'you are my %s I am %s year old' %('sunshine',22)
2 >>> s
3 'you are my sunshine I am 22 year old'
4 >>> s1 = 'you are my{} I am {} year old' .format('sunshine',22)
5 >>> s1
6 'you are mysunshine I am 22 year old'
7 >>> s2 = 'you are my{1} I am {0} year old' .format(22,'sunshine')
8 >>> s2
9 'you are mysunshine I am 22 year old'
10 >>> s3 = 'you are my {what} I am {age} year old' .format(age=22,what='sunshine')
11 >>> s3
12 'you are my sunshine I am 22 year old'
13 >>>
python中的三引号(''' ''') 或 (""" """):
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。可以用来定义字符串(一般是有多行或有特殊符号)、注释代码等
1 >>> s = ''' abc 2 asd 3 \\ 4 \n 5 ''' 6 >>> s 7 ' abc8 asd9 \\10 \n11 ' 12 >>>
字符串常用方法:
1 #!/usr/bin/env python
2 #coding:utf-8
3
4 '''字符串常用方法'''
5 s = 'abcDEF'
6
7 s.capitalize()
8 '''返回字符串s的首字母大写的副本'''
9 s.find(sub, start=None, end=None)
10 '''返回字符串在指定区间首次出现位置的索引,不指定区间表示整个字符串,若不存在,则返回-1'''
11 s.islower()
12 '''判断字符串里面的字符是否全是小写'''
13 s.isupper()
14 '''判断字符串里面的字符是否全是大写'''
15 s.lower()
16 '''返回将字符串的所有字符转换为小写后的副本'''
17 s.upper()
18 '''返回将字符串的所有字符转换为大写后的副本'''
19 s.replace(old, new, count=None)
20 '''返回将s中的子串 old 全更换为 new 后的副本,若指定了count,则只是替换一次'''
21 s.split(sep=None, maxsplit=_1)
22 '''将被seq(默认空格)分隔的子串以列表形式返回,若seq="a",则是被"a"分隔,eg:s.split('a') '''
23 s.strip(chars=None)
24 '''返回删除字符串两端的 chars 后的副本,默认chars=None表示删除空格 eg:s.strip('a')删除s两端的"a" '''
25 s.swapcase()
26 '''返回将字符串中小写转换为大写,大写转换为小写后的副本'''
27 s.startswith(x)
28 '''判断字符串s是否是以x开头'''
29 s.endswith(x)
30 '''判断字符串s是否是以x结尾'''
31 s.partition(x)
32 '''将字符串s按第一次遇到的x分为三部分 ('x前','x','x后') ,并以元祖形式返回'''
33 s.count(sub, start=None, end=None)
34 '''在指定区间内seq出现的次数,区间是[s,e)'''35 s.index(char)36 '''字符char在字符串中第一次出现位置的索引'''
未完待续。。。
来源:https://www.cnblogs.com/xtsec/p/6676197.html