字符串類型是編程語言里非常重要的數據類型,因為幾乎所有的程序主要做的事情就是處理字符串,這個隨著大家的學習會有深入的體會。
## 字符串的定義
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)
```
直接寫兩個引號,中間沒有空格,打印時沒有任何顯示。空字符串的概念非常重要,用來表示文本輸出為空。
## 字符串的索引
序列類型中的元素都用`索引`來表示它在序列中的位置。
單個字符在字符串中的位置叫`索引`,也叫`下標`。

索引是從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寫文件
- 文件指針