字符串类型是编程语言里非常重要的数据类型,因为几乎所有的程序主要做的事情就是处理字符串,这个随着大家的学习会有深入的体会。
## 字符串的定义
python中字符串(str)是使用单引号,双引号,三引号包裹起来的字符的序列,用来表示文本信息。
```python
>>> a = 'a' # 单引号
>>> b = "bc" # 双引号
>>> print(type(a), type(b))
<class 'str'> <class 'str'>
```
使用单引号和双引号进行字符串定义没有任何区别。
当单引号是字符串的一部分时用双引号定义字符串,反之亦然。
但个人建议一般情况下使用单引号定义字符串,因为不需要按`shift`键,方便。当然用双引号也没有什么不好,但尽量保持一致。
```python
>>> print('我最近看了"平凡的世界"')
我最近看了"平凡的世界"
>>> print("我最近看了'平凡的世界'")
我最近看了'平凡的世界'
```
一对单引号或双引号只能定义单行字符串,三引号可以用来创建多行表示的字符串。
```python
>>> content = '''窗前明月光,疑是地上霜;
举头望明月,低头思故乡。'''
>>> print(content)
窗前明月光,疑是地上霜;
举头望明月,低头思故乡。
```
三单引号和三双引号也没有本质区别。三双引号一般用来做多行注释,函数,类定义时的说明文档。
```python
"""
我是多行注释
函数,类定义的说明文档
后面我们再说
"""
```
字符串还有一个很重要的概念`空字符串`,表示字符串中没有任何字符,定义如下:
```python
>>> a = ''
>>> print(a)
```
直接写两个引号,中间没有空格,打印时没有任何显示。空字符串的概念非常重要,用来表示文本输出为空。
## 字符串的索引
序列类型中的元素都用`索引`来表示它在序列中的位置。
单个字符在字符串中的位置叫`索引`,也叫`下标`。
![1659343896765](https://wcflove.gitee.io/images/1659343896765.png)
索引是从0开始的整数序列,0表示字符串的第一个位置,以此类推。
通过索引可以获取字符串中的单个字符,语法如下:
```bash
str[index]
```
```python
>>> s = 'Hello,world!'
>>> print(s[0])
H
```
索引还可以使用负数表示,`-1`表示倒数第一个字符,`-2`表示倒数第二个字符,以此类推。
```python
>>> s = 'Hello,world!'
>>> print(s[-1])
!
>>> print(s[-2])
d
```
## 字符串的切片
获取序列中的子序列叫切片。
字符串的切片就是获取字符串的子串。字符串切片的语法如下:
```bash
str[start:end:step]
```
- `start`表示切片的开始索引,在切片的结果中包含开始索引的字符
- `end`表示结束索引,在切片的结果中不包含结束索引的字符
- `step`是步长,表示每隔几个字符切片,当步长为1是可以省略。
看下面的案例:
```python
>>> s = '012345678'
>>> print(s[1:5]) # 包头不包尾
1234
```
从头开始切片可以省略`start`
```python
>>> print(s[:5])
01234
```
切到末尾包含末尾可以省略`end`
```python
>>> print(s[1:])
12345678
```
当步长不为1时
```python
>>> print(s[1::2])
13579
```
特别的,当步长为负数时,表示反向切片,切片会从后往前进行,例如:
```python
>>> print(s[1::-1])
10
>>> print(s[9::-1])
876543210
```
## 字符串拼接
python中序列可以进行加法运算实现拼接。所以字符串可以通过`+`进行拼接:
```python
>>> a = 'hello'
>>> b = ' '
>>> c = 'world!'
>>> print(a+b+c)
hello world!
```
既然可以加法运算,那么一般也可以和整数进行乘法运算,实现重复拼接的效果:
```python
>>> print('*' * 10)
**********
```
## 字符串和数值的相互转化
`1`和`'1'`不同,`1.2`和`'1.2'`也不相同,但是它们可以相互转化。
整数和字符串之间的转化
```python
>>> int('1') # 整数字符串转化为整数
1
>>> str(1) # 整数转化为字符串
'1'
```
浮点数和字符串之间的转化
```python
>>> float('1.2')
1.2
>>> str(1.2)
'1.2'
```
将数值字符串转化为对应的数值类型时,格式一定要正确,否则会抛出异常
```python
>>> int('1.2') # '1.2'不是整数字符串运行会抛出异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.2'
```
注意:如果你用`print`函数打印整数和整数字符串输出形式是一样的。
```python
>>> print(1)
1
>>> print('1')
1
```
## 转义符
除了可见字符外,还有很多不可见的特殊字符,例如回车,换行,制表符等。这些字符是通过反斜杠`\`和其他字符组合来表示,称为`转义`,所以`\`也称为转义符。常见的转义字符如下表:
| 组合 | 符号 |
| :--- | :--------- |
| `\\` | 反斜杠符号 |
| `\'` | 单引号 |
| `\"` | 双引号 |
| \a | 响铃 |
| \n | 换行 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
```python
>>> print('窗前明月光,\n疑是地上霜。') # 输出换行
窗前明月光,
疑是地上霜。
>>> print('\'') # 输出单引号本身
'
```
其他的转义字符大家可以自行练习。
可以通过前导符`r`,强制不转义将字符串原样输出:
```python
>>> print(r'窗前明月光,\n疑是地上霜。') # 不转义
窗前明月光,\n疑是地上霜。
```
```
再给大家分享一个学习小技巧,我以前分不清正斜杠和反斜杠。直到有一天,撇`/`就是正,捺`\`就是反。
是不是秒记。
嘿嘿,不用谢!
```
- 第1章 编程基础
- 零基础能学Python吗?
- 编程语言是什么
- 编译型与解释型编程语言的区别
- python是什么?
- 学python能干什么?
- 第2章 python开发环境搭建
- windows下安装python
- cmd命令行工具
- 环境变量如何设置?
- 如何运行python程序?
- 学习神器Jupyter lab
- 第3章 基本数据类型
- 基本数据类型概述
- 变量的定义和使用
- 整数类型
- 浮点数类型
- 算术运算符
- 赋值运算符
- 字符串类型
- 字符串常用方法
- 字符串格式化
- 列表类型
- 元组类型
- 可变与不可变类型
- 深浅拷贝
- 集合类型
- 字典类型
- 布尔型
- NoneType
- 第4章 程序流程控制
- 程序结构
- if分支语句
- while条件循环
- for循环
- 循环控制关键字
- 异常处理
- 第5章函数与代码复用
- 函数的定义和调用
- 函数的参数
- 函数的返回值
- lambda函数
- 变量作用域
- python内建函数
- 第6章 面向对象
- 类和对象
- 属性
- 方法
- 继承
- super()函数
- 多态
- 私有化
- 自省与反射机制
- 第7章 模块和包
- 模块
- 包
- 第三方库
- 第8章 文件IO操作
- 文件概述
- 字符编码
- 字节类型
- python读取文件
- python写文件
- 文件指针