帮助手册
回忆上次内容
- 上次 分辨了
- 静态类型 语言
- 动态类型 语言
- python 属于
- 对类型要求 没有那么严格的
动态类型语言
- 对 初学者很友好
- 不过很多时候
- 也容易 弄不清变量类型
- 直接 修改代码
- 增强 程序的可读性
- 把变量的类型
- 明确标记在 变量名上
- 就像
- 把缩进 作为程序块的分界一样
- 明确起来
- 想要 真正成为编程高手
- 不但 要
- 明确 变量的数据类型
- 而且 要
- 知道 这数据类型 的特性
- 比如
字符串类型
- 到底有些什么特性呢?🤔
字符串
- s 是 字符串类型的变量
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符](https://s2.51cto.com/images/blog/202307/07215335_64a818dfef9b130678.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 字符串
- 英文名称是 string
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_02](https://s2.51cto.com/images/blog/202307/07215336_64a818e01a6ce69358.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
string
- 意思是
- 绳子或者琴弦
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_03](https://s2.51cto.com/images/blog/202307/07215336_64a818e042d4747504.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 后来也指
- 用绳子把什么东西串起来
- 比如串什么东西呢?
手串
- 这就是一串金刚菩提串的
- 折中串 有长有短
- 这一串 多少颗金刚菩提 呢?
- 这一串 108 颗
- 代表断除一百零八种烦恼
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_04](https://s2.51cto.com/images/blog/202307/07215336_64a818e040cb317015.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 有事没事就盘串
- 用猪鬃刷子清洗
- 放到阴凉地方阴干
- 用手盘包了浆
- 最终
- 证得一百零八种无量三昧
- 三昧就是三摩地
- 俗称入定
- 只要静心就都能入定
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_05](https://s2.51cto.com/images/blog/202307/07215336_64a818e08bcbe81577.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 经常盘笔记本键盘
- 虽然没有包浆
- 但是会盘出奇迹
糖葫芦串
- 山楂 串起来 形成的
- 就是糖葫芦串
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_06](https://s2.51cto.com/images/blog/202307/07215336_64a818e05263a76425.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 类似的还有
- 烤肉筋串
- 烤鸡心串
- 烤板筋串
- 字符串
字符串
- 字符串 就是 把字符串起来
- 字符串 里面每个山楂
- 就是一个字符
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_07](https://s2.51cto.com/images/blog/202307/07215336_64a818e056fc462943.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 怎么理解字符串?
字符串
- 字符串就是 字符的串
- 把一个个字符串起来
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_08](https://s2.51cto.com/images/blog/202307/07215336_64a818e035f2c35321.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 字符串有多长呢?
长度
- 知道了这个串是
- 由字符构成的
- 那这个串有多长呢
- 可以使用函数
- help(str.len)
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_09](https://s2.51cto.com/images/blog/202307/07215336_64a818e02e0c343932.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
len("oeasy")- 字符串有几个字符
- 字符串就有多长
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_10](https://s2.51cto.com/images/blog/202307/07215336_64a818e02273915861.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 总共 5 个字符
- 具体是哪五个字符?🤔
下标
- 字符可以用 下标运算符
[]进行访问
- 将 序号n 放入中括号里
- 就得到第n个字符
- 特别注意❗❗❗
- 下标不是从 1 开始的
- 而是从
0开始的 - 从零开始
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_11](https://s2.51cto.com/images/blog/202307/07215336_64a818e01d86858176.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 这样就可以用序号
- 访问到字符串中的每个字符
下标范围
- 下标从 0 开始
- 最后一位是 len(o)-1
- 也就是 5-1 = 4
- 写成-1 也可以
- 意思是 倒数第一个字符
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_12](https://s2.51cto.com/images/blog/202307/07215336_64a818e05280441324.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 如果我
就想
- 访问 o[5] 呢
下标越界
- 访问 o[5] 报错
- IndexError
- string index out of range
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_13](https://s2.51cto.com/images/blog/202307/07215336_64a818e02cc0446153.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 字符串索引 超出范围
- 字符串索引 下标越界
- 访问了 一个不存在的下标值
类型和位置
- 先自省一下
- 自省(introspection)
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_14](https://s2.51cto.com/images/blog/202307/07215336_64a818e02ef0839067.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 通过 type 函数获得 变量o 的类型
- 变量o的类型 是
str - 就是 字符串 string
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_15](https://s2.51cto.com/images/blog/202307/07215336_64a818e02c03935929.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 通过 id 函数获得 变量o 在内存中的地址
- 这个地址是一串数字
- 这数字 就是 o 在内存中的唯一标识
- 是 变量o的内存地址
初始化过程
- 内存地址(
140547862959216)
- 被赋给s_title
- s_title 里面存的是
- "oeasy"字符串
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_16](https://s2.51cto.com/images/blog/202307/07215336_64a818e03b08688969.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- oeasy这5个字符
- 究竟是如何存储在内存中的呢?
ascii 编码
- 字符串中存储的是英文字符
- 属于ascii 字符
- 有七位二进制数
- 放在内存里面一个字节就可以
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_17](https://s2.51cto.com/images/blog/202307/07215336_64a818e02986363877.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 那 5 个字符
- 分别什么样呢?
5 个字符
- id 那个位置
- 有一个 str 类的对象
- 指向五个字符连成的串
- 每个字符都有自己的字节
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_18](https://s2.51cto.com/images/blog/202307/07215336_64a818e083f842386.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 这些字节都在什么位置呢?
字符位置
- 字符串
- 有字符串的地址
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_19](https://s2.51cto.com/images/blog/202307/07215336_64a818e07039399125.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 下标索引到的字符
- 有字符的地址
- 可以注意到相同字符的位置是相同的
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_20](https://s2.51cto.com/images/blog/202307/07215336_64a818e09452597980.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 如果有回车这类的转义字符呢?
回车字符
- 一个转义字符也占据一个字节
- 比如 回车字符
\n
- 序号为10
- 字节状态为
b"\x0a"
- 回忆一下进制转化
- 从十进制到其他进制
- 2进制 bin
- 8进制 oct
- 16进制 hex
- 从其他进制到十进制
- int
- 编码转化
- 从字符转化为序号
- ord
- 从序号转化为字符
- chr
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_21](https://s2.51cto.com/images/blog/202307/07215336_64a818e0807729139.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 字节序列与字符串转化
- 字节序列到字符串
- decode
- 从字符串到字节序列
- encode
转义字符
- 转义字符也占据一个字节
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_22](https://s2.51cto.com/images/blog/202307/07215336_64a818e075d6198657.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 所有转义字符都如此么?
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_23](https://s2.51cto.com/images/blog/202307/07215336_64a818e0748c238661.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 如果有中文字符呢?
中文字符
- str = "a一"
- 总共两个字符
- 一个是英文字符
- 另一个是中文汉字字符
- 对应两个位置
- str[0] - a
- str[1] - 一
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_转义字符_24](https://s2.51cto.com/images/blog/202307/07215336_64a818e08508894494.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 其中 a 是 ascii 字符
- 长度为1
- 一是 utf-8 编码的 unicode 字符
- 作为字符的长度也为1
- 具体占用几个字节呢?
编码
- 首先要知道内存中的编码方式
- 到底是utf-8
- 还是unicode
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_25](https://s2.51cto.com/images/blog/202307/07215336_64a818e06906e64741.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 查询str的帮助
- 发现默认编码是系统的默认编码
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_26](https://s2.51cto.com/images/blog/202307/07215336_64a818e082e8b5817.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 所以在python3的运行环境下
- str的默认编码就是系统的编码
- 目前就是utf-8
内存情况
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_27](https://s2.51cto.com/images/blog/202307/07215336_64a818e07af9a629.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 可以看到
- a 就是
\x61 - 一 就是
\xe4\xb8\x80
用变量赋值
- s1 = "oeasy"
- 这个字符串长度 5 个字节
- oeasy
- s1 位于 139633377299288
- s2 = "o2z"
- 这个字符串长度 3 个字节
- o2z
- s2 位于 139633366623112
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_字符串_28](https://s2.51cto.com/images/blog/202307/07215336_64a818e09331b20545.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- s2 = s1
- 令s2 位于 id(s1)
- s2 和 s1 都指向 原来 s1 的地址
- 最终引用情况
- 字符串"oeasy"
- 有两个变量引用(s1、s2)
- 字符串 "o2z"
- 原来 s2 所指向
- 现在没有变量引用了
- 会被系统垃圾回收
注意事项
- str 可以
- 把数字转化为一个字符串
- str 是类的名字
- 但是一旦被赋值
- 就无法转化了
![图片描述 [oeasy]python0071_字符串类型_str_string_下标运算符_中括号_ci_29](https://s2.51cto.com/images/blog/202307/07215336_64a818e0a2ed738628.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
- 特别注意❗❗❗
- 初学者要特别注意
- 不要将str作为变量名!📢
总结
- 这次了解的是字符串
- 字符串就是字符的串
- 字符串长度 可以用 len函数
- 字符可以用下标索引 []
- 可以用str
- 将整型数字转化为字符串
- 字符的长度本身有长有短
- ascii 包括各种 转义字符
- 都对应 1 个字节
- unicode 字符中的汉字
- 可能对应 3 个字节
- 但不管本身是 1 字节 还是 3 字节
- 都算一个字符
- 将字符串赋给一个字符串变量
- 这就是字符串变量的id
- 就是字符串在内存中的地址
- 除了字符串
- 还有什么变量类型?🤔
















