Python字符串使我们最常用的数据类型。
以使用引号( ' 或 " )来创建字符串。
一:创建字符串并访问他的值
# *定义字符串
*string_one = "我是一个字符串"
print("string_one:" + string_one +",并且在打印的时候被更新了")
输出:
string_one:我是一个字符串,并且在打印的时候被更新了
二:python的驻留机制
aa = 'python'
bb = "python"
cc = '''python'''
print(id(aa))
print(id(bb))
print(id(cc))
输出:
2307494144752
2307494144752
2307494144752
上边的代码使用三种不同的方式去定义了三个字符串,但是这三个字符串的内存地址是相同的。说明,这个字符串在内存中只有一份。
python字符串是一个不可变的字符序列,这个特性和元组是一样的
python的驻留机制有一下几个特殊情况
驻留机制的几种情况(交互模式)
1:字符串的长度为0或1时
s1 = ''
s2 = ''
result = s1 is s2
print(result)
输出:True
2:符合标识符的字符串(标识符是由字母(A--Z 和 a--z)、下划线和数字组成。如果标识符中出现除了这 3 类字符之外的其他字符,就肯定是不合法标识符。 )
s1 = 'qwe!'
s2 = 'qwe!'
print(s1 is s2)
False
s1 == s2
True
id(s1)
1714461826216
id(s2)
1714461826272
s1 = 'qwe'
s2 = 'qwe'
s1 is s2
True
3:字符串只在编译时进行驻留,而非运行时
4:[-5,256]之间的整数数字
sys中的intern方法强制2个字符串指向同一个对象
PyCharm对字符串进行了优化处理
三:python转义符
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
\ | 反斜杠符号 |
' | 单引号 |
" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
四:python字符串运算符
下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":
操作符 | 描述 | 实例 |
---|---|---|
+ | 字符串连接 | a + b 输出结果: HelloPython |
* | 重复输出字符串 | a*2 输出结果:HelloHello |
[] | 通过索引获取字符串中字符 | a[1] 输出结果 e |
[ : ] | 截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。 | a[1:4] 输出结果 ell |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | 'H' in a 输出结果 True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | 'M' not in a 输出结果 True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。就是原样输出 | print( r'\n' )print( R'\n' ) |
例:
a = "Hello"
b = "Python"
print("a + b 输出结果:", a + b)
print("a * 2 输出结果:", a * 2)
print("a[1] 输出结果:", a[1])
print("a[1:4] 输出结果:", a[1:4])
if ("H" in a):
print("H 在变量 a 中")
else:
print("H 不在变量 a 中")
if ("M" not in a):
print("M 不在变量 a 中")
else:
print("M 在变量 a 中")
# *原样输出
*print(r'\n')
print(R'\n')
五:Python字符串格式化
Python的字符串还是很有意思的。
之前在使用PHP的时候,拼接字符串是一件很简单的事。
例如下边这样:
<?php
$str = "我是一个字符串,我有" . 10 . "个字符";
echo $str
但是python中的字符串拼接,相对要麻烦一点,不同数据类型的变量是不可以直接像PHP中那样直接拼接的。
需要将非字符串类型的变量转换成字符串,再进行拼接。
string_ge = "我是一个字符串,我有" + str(10) + "个字符"
print(string_ge)
这样写是没有问题的。但是python为我们提供了一些字符串格式化的符号:
****符 ****号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
在正数前面显示空格 | |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
例:
string_geshi = "我是一个字符串,我有 %d 个字符" % (10)
print(string_geshi)
输出:
我是一个字符串,我有 10 个字符
六:使用三引号实现多行字符串
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下
string_three = """
{(我是一个多行字符串 \n 很多行 \n 很多行 \n 很多行)}
……
"""
print(string_three)
输出:
{(我是一个多行字符串
很多行
很多行
很多行)}
……
七:字符串常用操作
1:查找字符串
查找字符串我们常用的四个函数有
Index:从左向右查找字符串第一次出现的位置,未找到报异常
Rindex:从右向左查找字符串第一次出现的位置,未找到报异常
Find:从左向右查找字符串第一次出现的位置。未找到返回-1
Rfind:从右向左查找字符串第一次出现的位置,未找到返回-1
str = "hello hello"
print(str.index('lo'))
print(str.rindex('lo'))
print(str.find('lo'))
print(str.rfind('lo'))
# print(str.index('xx'))
# print(str.rindex('xx'))
print(str.find('xx'))
print(str.rfind('lxo'))
输出:
3
9
3
9
-1
-1
中间注释那两行print代码报异常,开发中建议使用find与rfind进行查找
2:字符串大小写操作
关于字符串大小写转换的操作有以下函数:
Upper:把字符串中所有字符转换为大写
Lower:把字符串中所有字符转换成小写
Swapcase:将字符串中所有小写字符转换成大写,所有大写字符转换成小写
Capitalize:将字符串的第一个字符转换为大写
Title:返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
str = "hello Hello"
print(str.upper());
print(str.lower());
print(str.swapcase());
print(str.capitalize());
print(str.title());
输出:
HELLO HELLO
hello hello
HELLO hELLO
Hello hello
Hello Hello
3:字符串内容对其的操作方法
内容对其我们使用到的函数有:
Center:返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。设置长度小于字符长度,返回原字符串
Ljust:返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。设置长度小于字符长度,返回原字符串
Rjust:返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串。设置长度小于字符长度,返回原字符串
Zfill:返回长度为 width 的字符串,原字符串右对齐,前面填充0
str = "hello World"
print(str.center(20, '+'))
print(str.ljust(20, '+'))
print(str.rjust(20, '+'))
print(str.zfill(20))
输出:
++++hello World+++++
hello World+++++++++
+++++++++hello World
000000000hello World
4:字符串的拆分
字符串拆分我们用到的函数:
split(str="", num=string.count(str)):以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串,返回值是一个列表。
rsplit(str="", num=string.count(str)):以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串,返回值是一个列表。
str = "hello World"
print(str.split(' '))
print(str.rsplit('Wo'))
输出:
['hello', 'World']
['hello ', 'rld']
5:字符串合并
字符串合并我们使用参数:
join(seq):以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
使用join的时候需要注意一下语法:
lists = ['hello', 'World']
print(" ".join(lists))
输出:
hello World
6:字符串替换操作
字符串替换我们需要用到 replace
str = "hello World"
print(str.replace('he','123456'))
输出:
123456llo World
7:字符串编码与解码
字符编码与解码我们用到的函数:
encode(encoding='UTF-8',errors='strict'):以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
str = '侯门一入深似海,从此萧郎是路人';
# 编码
gbk = str.encode('GBK')
utf = str.encode('UTF-8')
print(gbk)
print(utf)
# 解码
degbk = gbk.decode('GBK')
deutf = utf.decode('UTF-8')
print(degbk)
print(deutf)
输出:
b'\xba\xee\xc3\xc5\xd2\xbb\xc8\xeb\xc9\xee\xcb\xc6\xba\xa3\xa3\xac\xb4\xd3\xb4\xcb\xcf\xf4\xc0\xc9\xca\xc7\xc2\xb7\xc8\xcb'
b'\xe4\xbe\xaf\xe9\x97\xa8\xe4\xb8\x80\xe5\x85\xa5\xe6\xb7\xb1\xe4\xbc\xbc\xe6\xb5\xb7\xef\xbc\x8c\xe4\xbb\x8e\xe6\xad\xa4\xe8\x90\xa7\xe9\x83\x8e\xe6\x98\xaf\xe8\xb7\xaf\xe4\xba\xba'
侯门一入深似海,从此萧郎是路人
侯门一入深似海,从此萧郎是路人
有好的建议,请在下方输入你的评论。