[oeasy]python0071_字符串類型_str_string_下標運算符_中括號

回憶上次內容
上次 分辨了
靜態(tài)類型 語言
動態(tài)類型 語言
python 屬于
也容易 弄不清變量類型
動態(tài)類型
語言對類型要求 沒有那么嚴格的
對 初學者很友好
不過很多時候
直接 修改代碼
把縮進 作為程序塊的分界一樣
明確起來
明確標記在 變量名上
增強 程序的可讀性
把變量的類型
就像
想要 真正成為編程高手
知道 這數(shù)據(jù)類型 的特性
明確 變量的數(shù)據(jù)類型
不但 要
而且 要
比如
字符串
類型到底有些什么特性呢???
字符串
s 是 字符串類型的變量

字符串
英文名稱是 string

string
意思是
繩子或者琴弦

后來也指
用繩子把什么東西串起來
比如串什么東西呢?
手串
這就是一串金剛菩提串的
折中串 有長有短
這一串 多少顆金剛菩提 呢?
這一串 108 顆
代表斷除一百零八種煩惱

有事沒事就盤串
用豬鬃刷子清洗
放到陰涼地方陰干
用手盤包了漿
最終
證得一百零八種無量三昧
三昧就是三摩地
俗稱入定
只要靜心就都能入定

經(jīng)常盤筆記本鍵盤
但是會盤出奇跡
雖然沒有包漿
糖葫蘆串
山楂 串起來 形成的
就是糖葫蘆串

類似的還有
烤肉筋串
烤雞心串
烤板筋串
字符串
字符串
字符串 就是 把字符串起來
就是一個字符
字符串 里面每個山楂

怎么理解字符串?
字符串
字符串就是 字符的串
把一個個字符串起來

字符串有多長呢?
長度
知道了這個串是
由字符構成的
那這個串有多長呢
可以使用函數(shù)
help(str.len)

len("oeasy")
字符串有幾個字符
字符串就有多長

總共 5 個字符
具體是哪五個字符???
下標
字符可以用 下標運算符
[]
進行訪問就得到第n個字符
將 序號n 放入中括號里
特別注意???
下標不是從 1 開始的
而是從
0
開始的從零開始

這樣就可以用序號
訪問到字符串中的每個字符
下標范圍
下標從 0 開始
最后一位是 len(o)-1
也就是 5-1 = 4
寫成-1 也可以
意思是 倒數(shù)第一個字符

如果我
就
想訪問 o[5] 呢
下標越界
訪問 o[5] 報錯
IndexError
string index out of range

字符串索引 超出范圍
字符串索引 下標越界
訪問了 一個不存在的下標值
類型和位置
先自省一下
自省(introspection)

通過 type 函數(shù)獲得 變量o 的類型
變量o的類型 是
str
就是 字符串 string

通過 id 函數(shù)獲得 變量o 在內存中的地址
這個地址是一串數(shù)字
這數(shù)字 就是 o 在內存中的唯一標識
是 變量o的內存地址
初始化過程
內存地址(
140547862959216
)被賦給s_title
s_title 里面存的是
"oeasy"字符串

oeasy這5個字符
究竟是如何存儲在內存中的呢?
ascii 編碼
字符串中存儲的是英文字符
屬于ascii 字符
有七位二進制數(shù)
放在內存里面一個字節(jié)就可以

那 5 個字符
分別什么樣呢?
5 個字符
id 那個位置
有一個 str 類的對象
指向五個字符連成的串
每個字符都有自己的字節(jié)

這些字節(jié)都在什么位置呢?
字符位置
字符串
有字符串的地址

下標索引到的字符
可以注意到相同字符的位置是相同的
有字符的地址

如果有回車這類的轉義字符呢?
回車字符
一個轉義字符也占據(jù)一個字節(jié)
序號為10
字節(jié)狀態(tài)為
b"\x0a"
比如 回車字符
\n
回憶一下進制轉化
int
2進制 bin
8進制 oct
16進制 hex
從十進制到其他進制
從其他進制到十進制
編碼轉化
chr
ord
從字符轉化為序號
從序號轉化為字符
字節(jié)序列與字符串轉化
encode
decode
字節(jié)序列到字符串
從字符串到字節(jié)序列
轉義字符
轉義字符也占據(jù)一個字節(jié)
所有轉義字符都如此么?
如果有中文字符呢?
中文字符
str = “a一”
總共兩個字符
一個是英文字符
另一個是中文漢字字符
對應兩個位置
str[0] - a
str[1] - 一
其中 a 是 ascii 字符
長度為1
一是 utf-8 編碼的 unicode 字符
作為字符的長度也為1
具體占用幾個字節(jié)呢?
編碼
首先要知道內存中的編碼方式
到底是utf-8
還是unicode
查詢str的幫助
發(fā)現(xiàn)默認編碼是系統(tǒng)的默認編碼
所以在python3的運行環(huán)境下
目前就是utf-8
str的默認編碼就是系統(tǒng)的編碼
內存情況
可以看到
a 就是
\x61
一 就是
\xe4\xb8\x80
用變量賦值
s1 = “oeasy”
oeasy
這個字符串長度 ?5 個字節(jié)
s1 位于 139633377299288
s2 = “o2z”
o2z
這個字符串長度 3 個字節(jié)
s2 位于 139633366623112
s2 = s1
令s2 位于 id(s1)
s2 和 s1 都指向 原來 s1 的地址
最終引用情況
原來 s2 所指向
現(xiàn)在沒有變量引用了
會被系統(tǒng)垃圾回收
有兩個變量引用(s1、s2)
字符串"oeasy"
字符串 “o2z”
注意事項
str 可以
把數(shù)字轉化為一個字符串
str 是類的名字
但是一旦被賦值
就無法轉化了
特別注意???
初學者要特別注意
不要將str作為變量名!??
總結
這次了解的是字符串
字符串就是字符的串
字符串長度 可以用 len函數(shù)
字符可以用下標索引 []
可以用str
將整型數(shù)字轉化為字符串
字符的長度本身有長有短
都算一個字符
可能對應 3 個字節(jié)
都對應 1 個字節(jié)
ascii 包括各種 轉義字符
unicode 字符中的漢字
但不管本身是 1 字節(jié) 還是 3 字節(jié)
將字符串賦給一個字符串變量
就是字符串在內存中的地址
這就是字符串變量的id
除了字符串
還有什么變量類型???
下次再說!??
藍橋->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython