帮助手册
回忆上次内容
- 上次 分辨了 
  - 静态类型 语言
- 动态类型 语言
 
- python 属于 
  - 对类型要求 没有那么严格的 
    - 动态类型语言
 
- 对 初学者很友好
- 不过很多时候 
    - 也容易 弄不清变量类型
 
 
- 对类型要求 没有那么严格的 
    
- 直接 修改代码 
  - 增强 程序的可读性
- 把变量的类型 
    - 明确标记在 变量名上
 
- 就像 
    - 把缩进 作为程序块的分界一样
- 明确起来
 
 
- 想要 真正成为编程高手 
  - 不但 要 
    - 明确 变量的数据类型
 
- 而且 要 
    - 知道 这数据类型 的特性
 
 
- 不但 要 
    
- 比如 字符串类型- 到底有些什么特性呢?🤔
 
字符串
- s 是 字符串类型的变量

- 字符串 
  - 英文名称是 string
 

string
- 意思是 
  - 绳子或者琴弦
 

- 后来也指 
  - 用绳子把什么东西串起来
 
- 比如串什么东西呢?
手串
- 这就是一串金刚菩提串的 
  - 折中串 有长有短
 
- 这一串 多少颗金刚菩提 呢? 
  - 这一串 108 颗
- 代表断除一百零八种烦恼
 

- 有事没事就盘串 
  - 用猪鬃刷子清洗
- 放到阴凉地方阴干
- 用手盘包了浆
 
- 最终 
  - 证得一百零八种无量三昧
- 三昧就是三摩地
- 俗称入定
- 只要静心就都能入定
 

- 经常盘笔记本键盘 
  - 虽然没有包浆 
    - 但是会盘出奇迹
 
 
- 虽然没有包浆 
    
糖葫芦串
- 山楂 串起来 形成的 
  - 就是糖葫芦串
 

- 类似的还有 
  - 烤肉筋串
- 烤鸡心串
- 烤板筋串
- 字符串
 
字符串
- 字符串 就是 把字符串起来 
  - 字符串 里面每个山楂 
    - 就是一个字符
 
 
- 字符串 里面每个山楂 
    

- 怎么理解字符串?
字符串
- 字符串就是 字符的串 
  - 把一个个字符串起来
 

- 字符串有多长呢?
长度
- 知道了这个串是 
  - 由字符构成的
- 那这个串有多长呢
 
- 可以使用函数 
  - help(str.len)
 

-  len("oeasy")
-  字符串有几个字符 - 字符串就有多长
 

- 总共 5 个字符
- 具体是哪五个字符?🤔
下标
- 字符可以用 下标运算符[]进行访问- 将 序号n 放入中括号里 
    - 就得到第n个字符
 
 
- 将 序号n 放入中括号里 
    
- 特别注意❗❗❗ 
  - 下标不是从 1 开始的
- 而是从 0开始的
- 从零开始
 

- 这样就可以用序号 
  - 访问到字符串中的每个字符
 
下标范围
- 下标从 0 开始
- 最后一位是 len(o)-1 
  - 也就是 5-1 = 4
 
- 写成-1 也可以 
  - 意思是 倒数第一个字符
 

- 如果我就想- 访问 o[5] 呢
 
下标越界
- 访问 o[5] 报错 
  - IndexError
- string index out of range
 

- 字符串索引 超出范围 
  - 字符串索引 下标越界
- 访问了 一个不存在的下标值
 
类型和位置
- 先自省一下 
  - 自省(introspection)
 

- 通过 type 函数获得 变量o 的类型 
  - 变量o的类型 是str
- 就是 字符串 string
 
- 变量o的类型 是

- 通过 id 函数获得 变量o 在内存中的地址 
  - 这个地址是一串数字
 
- 这数字 就是 o 在内存中的唯一标识 
  - 是 变量o的内存地址
 
初始化过程
- 内存地址(140547862959216)- 被赋给s_title
 
- s_title 里面存的是 
  - "oeasy"字符串
 

- oeasy这5个字符 
  - 究竟是如何存储在内存中的呢?
 
ascii 编码
- 字符串中存储的是英文字符 
  - 属于ascii 字符
- 有七位二进制数
- 放在内存里面一个字节就可以
 

- 那 5 个字符 
  - 分别什么样呢?
 
5 个字符
- id 那个位置 
  - 有一个 str 类的对象
 
- 指向五个字符连成的串 
  - 每个字符都有自己的字节
 

- 这些字节都在什么位置呢?
字符位置
- 字符串 
  - 有字符串的地址
 

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

- 如果有回车这类的转义字符呢?
回车字符
- 一个转义字符也占据一个字节 
  - 比如 回车字符\n- 序号为10
- 字节状态为 b"\x0a"
 
 
- 比如 回车字符
- 回忆一下进制转化 
  - 从十进制到其他进制 
    - 2进制 bin
- 8进制 oct
- 16进制 hex
 
- 从其他进制到十进制 
    - int
 
 
- 从十进制到其他进制 
    
- 编码转化 
  - 从字符转化为序号 
    - ord
 
- 从序号转化为字符 
    - chr
 
 
- 从字符转化为序号 
    

- 字节序列与字符串转化 
  - 字节序列到字符串 
    - decode
 
- 从字符串到字节序列 
    - encode
 
 
- 字节序列到字符串 
    
转义字符
- 转义字符也占据一个字节

- 所有转义字符都如此么?

- 如果有中文字符呢?
中文字符
- str = “a一”
- 总共两个字符 
  - 一个是英文字符
- 另一个是中文汉字字符
 
- 对应两个位置 
  - str[0] - a
- str[1] - 一
 

- 其中 a 是 ascii 字符 
  - 长度为1
 
- 一是 utf-8 编码的 unicode 字符 
  - 作为字符的长度也为1
 
- 具体占用几个字节呢?
编码
- 首先要知道内存中的编码方式 
  - 到底是utf-8
- 还是unicode
 

- 查询str的帮助 
  - 发现默认编码是系统的默认编码
 

- 所以在python3的运行环境下 
  - str的默认编码就是系统的编码 
    - 目前就是utf-8
 
 
- str的默认编码就是系统的编码 
    
内存情况

- 可以看到 
  - a 就是 \x61
- 一 就是 \xe4\xb8\x80
 
- a 就是 
用变量赋值
- s1 = “oeasy” 
  - 这个字符串长度 5 个字节 
    - oeasy
 
- s1 位于 139633377299288
 
- 这个字符串长度 5 个字节 
    
- s2 = “o2z” 
  - 这个字符串长度 3 个字节 
    - o2z
 
- s2 位于 139633366623112
 
- 这个字符串长度 3 个字节 
    

- s2 = s1 
  - 令s2 位于 id(s1)
- s2 和 s1 都指向 原来 s1 的地址
 
- 最终引用情况 
  - 字符串"oeasy" 
    - 有两个变量引用(s1、s2)
 
- 字符串 “o2z” 
    - 原来 s2 所指向
- 现在没有变量引用了
- 会被系统垃圾回收
 
 
- 字符串"oeasy" 
    
注意事项
- str 可以 
  - 把数字转化为一个字符串
 
- str 是类的名字 
  - 但是一旦被赋值
- 就无法转化了
 

- 特别注意❗❗❗ 
  - 初学者要特别注意
- 不要将str作为变量名!📢
 
总结
-  这次了解的是字符串 
-  字符串就是字符的串 - 字符串长度 可以用 len函数
- 字符可以用下标索引 []
 
-  可以用str - 将整型数字转化为字符串
 
-  字符的长度本身有长有短 - ascii 包括各种 转义字符 
    - 都对应 1 个字节
 
- unicode 字符中的汉字 
    - 可能对应 3 个字节
 
- 但不管本身是 1 字节 还是 3 字节 
    - 都算一个字符
 
 
- ascii 包括各种 转义字符 
    
-  将字符串赋给一个字符串变量 - 这就是字符串变量的id 
    - 就是字符串在内存中的地址
 
 
- 这就是字符串变量的id 
    
-  除了字符串 - 还有什么变量类型?🤔
 
-  下次再说!👋 
-  蓝桥->https://www.lanqiao.cn/courses/3584 
-  github->https://github.com/overmind1980/oeasy-python-tutorial 
-  gitee->https://gitee.com/overmind1980/oeasypython 



















