网站首页 > 技术文章 正文
除了数字,Python 还可以操作字符串。字符串有多种表现形式,用单引号('……')或双引号("……")标注的结果相同 。反斜杠 \ 用于转义:
>>>'spam eggs' #单引号
'spam eggs'
>>>'doesn\'t' #使用\'转义单引号…
"doesn't"
>>>"doesn't" #或者使用双引号代替
"doesn't"
>>>'"Yes," they said.'
'"Yes," they said.'
>>>"\"Yes,\" they said."
'"Yes," they said.'
>>>'"Isn\'t," they said.'
'"Isn\'t," they said.'
交互式解释器会为输出的字符串加注引号,特殊字符使用反斜杠转义。虽然,有时输出的字符串看起来与输入的字符串不一样(外加的引号可能会改变),但两个字符串是相同的。如果字符串中有单引号而没有双引号,该字符串外将加注双引号,反之,则加注单引号。print() 函数输出的内容更简洁易读,它会省略两边的引号,并输出转义后的特殊字符:
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
>>> print('"Isn\'t," they said.')
"Isn't," they said.
>>> s = 'First line.\nSecond line.' #\ n表示换行符
>>> s #没有使用print(),则\n将包含在输出中
'First line.\nSecond line.'
>>> print(s) # 使用print(), \n生成一个新行
First line.
Second line.
如果不希望前置 \ 的字符转义成特殊字符,可以使用 原始字符串,在引号前添加 r 即可:
>>> print('C:\some\name') #这里的n表示换行符!
C:\some
ame
>>> print(r'C:\some\name') # 注意引号前的r
C:\some\name
字符串字面值可以包含多行。 一种实现方式是使用三重引号:"""...""" 或 '''...'''。 字符串中将自动包括行结束符,但也可以在换行的地方添加一个 \ 来避免此情况。 参见以下示例:
print("""\
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
""")
输出如下(请注意开始的换行符没有被包括在内):
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
字符串可以用 + 合并(粘到一起),也可以用 * 重复:
>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'
相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并:
>>> 'Py' 'thon'
'Python'
拆分长字符串时,这个功能特别实用:
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
这项功能只能用于两个字面值,不能用于变量或表达式:
>>> prefix = 'Py'
>>> prefix 'thon' #不能连接变量和字符串文字
File "<stdin>", line 1
prefix 'thon'
^
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^
SyntaxError: invalid syntax
合并多个变量,或合并变量与字面值,要用 +:
prefix + 'thon'
字符串支持 索引 (下标访问),第一个字符的索引是 0。单字符没有专用的类型,就是长度为一的字符串:
>>> word = 'Python'
>>> word[0] # 位置0的字符
'P'
>>> word[5] # 位置5的字符
'n'
索引还支持负数,用负数索引时,从右边开始计数:
>>> word[-1] # 最后一个字符
'n'
>>> word[-2] # 倒数第二个字符
'o'
>>> word[-6]
'P'
注意,-0 和 0 一样,因此,负数索引从 -1 开始。
除了索引,字符串还支持 切片。索引可以提取单个字符,切片 则提取子字符串:
>>> word[0:2] # 从位置0(包括)到位置2(不包括)的字符
'Py'
>>> word[2:5] # 从位置2(包括)到位置5(不包括)的字符
'tho'
切片索引的默认值很有用;省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾:
>>> word[:2] # 字符从开头到位置2(不包括)
'Py'
>>> word[4:] # 从位置4(包括)到结尾的字符
'on'
>>> word[-2:] # 字符从倒数第二(包括)到最后
'on'
注意,输出结果包含切片开始,但不包含切片结束。因此,s[:i] + s[i:] 总是等于 s:
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'
还可以这样理解切片,索引指向的是字符 之间 ,第一个字符的左侧标为 0,最后一个字符的右侧标为 n ,n 是字符串长度。例如:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
第一行数字是字符串中索引 0...6 的位置,第二行数字是对应的负数索引位置。i 到 j 的切片由 i 和 j 之间所有对应的字符组成。
对于使用非负索引的切片,如果两个索引都不越界,切片长度就是起止索引之差。例如, word[1:3] 的长度是 2。
索引越界会报错:
>>> word[42] # the word only has 6 characters
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
但是,切片会自动处理越界索引:
>>> word[4:42]
'on'
>>> word[42:]
''
Python 字符串不能修改,是 immutable(不变的) 的。因此,为字符串中某个索引位置赋值会报错:
>>> word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
要生成不同的字符串,应该新建一个字符串:
>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'
内置函数 len() 返回字符串的长度:
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
猜你喜欢
- 2024-10-05 你会在 Python 中使用字符串吗?(python字符串需要用什么包裹)
- 2024-10-05 javascript内置对象总结 - String
- 2024-10-05 Python 中字符串和字符串处理的综合指南
- 2024-10-05 C++中的string用法(c++ string用法总结)
- 2024-10-05 Excel文本函数——CONCATENATE函数详解
- 2024-10-05 探究C语言中字符串大小和长度易错点
- 2024-10-05 【PythonTip题库300题】第47题:字符串中缺失的字母
- 2024-10-05 Rust: 字符串总结,虽常见但非常重要
- 2024-10-05 这些字符串处理函数你用过吗(字符串常用操作函数)
- 2024-10-05 C字符串搜索和替换算法(字符串查找替换c语言)
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)