欢迎光临散文网 会员登陆 & 注册

[oeasy]python0071_字符串类型_str_string_下标运算符_中括号

2023-07-07 22:02 作者:oeasy  | 我要投稿

回忆上次内容

  • 上次 分辨了

    • 静态类型 语言

    • 动态类型 语言

  • python 属于

    • 也容易 弄不清变量类型

    • 动态类型 语言

    • 对类型要求 没有那么严格的

    • 对 初学者很友好

    • 不过很多时候

  • 直接 修改代码

    • 把缩进 作为程序块的分界一样

    • 明确起来

    • 明确标记在 变量名上

    • 增强 程序的可读性

    • 把变量的类型

    • 就像

  • 想要 真正成为编程高手

    • 知道 这数据类型 的特性

    • 明确 变量的数据类型

    • 不但 要

    • 而且 要

  • 比如 字符串类型

    • 到底有些什么特性呢?🤔

字符串

  • s 是 字符串类型的变量

  • 字符串

    • 英文名称是 string

string

  • 意思是

    • 绳子或者琴弦

  • 后来也指

    • 用绳子把什么东西串起来

  • 比如串什么东西呢?

手串

  • 这就是一串金刚菩提串的

    • 折中串 有长有短

  • 这一串 多少颗金刚菩提 呢?

    • 这一串 108 颗

    • 代表断除一百零八种烦恼

  • 有事没事就盘串

    • 用猪鬃刷子清洗

    • 放到阴凉地方阴干

    • 用手盘包了浆

  • 最终

    • 证得一百零八种无量三昧

    • 三昧就是三摩地

    • 俗称入定

    • 只要静心就都能入定

  • 经常盘笔记本键盘

    • 但是会盘出奇迹

    • 虽然没有包浆

糖葫芦串

  • 山楂 串起来 形成的

    • 就是糖葫芦串

  • 类似的还有

    • 烤肉筋串

    • 烤鸡心串

    • 烤板筋串

    • 字符串

字符串

  • 字符串 就是 把字符串起来

    • 就是一个字符

    • 字符串 里面每个山楂

  • 怎么理解字符串?

字符串

  • 字符串就是 字符的串

    • 把一个个字符串起来

  • 字符串有多长呢?

长度

  • 知道了这个串是

    • 由字符构成的

    • 那这个串有多长呢

  • 可以使用函数

    • help(str.len)

  • len("oeasy")

  • 字符串有几个字符

    • 字符串就有多长

  • 总共 5 个字符

  • 具体是哪五个字符?🤔

下标

  • 字符可以用 下标运算符[]进行访问

    • 就得到第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

  • 通过 id 函数获得 变量o 在内存中的地址

    • 这个地址是一串数字

  • 这数字 就是 o 在内存中的唯一标识

    • 是 变量o的内存地址

初始化过程

  • 内存地址(140547862959216)

    • 被赋给s_title

  • s_title 里面存的是

    • "oeasy"字符串

  • oeasy这5个字符

    • 究竟是如何存储在内存中的呢?

ascii 编码

  • 字符串中存储的是英文字符

    • 属于ascii 字符

    • 有七位二进制数

    • 放在内存里面一个字节就可以

  • 那 5 个字符

    • 分别什么样呢?

5 个字符

  • id 那个位置

    • 有一个 str 类的对象

  • 指向五个字符连成的串

    • 每个字符都有自己的字节

  • 这些字节都在什么位置呢?

字符位置

  • 字符串

    • 有字符串的地址

  • 下标索引到的字符

    • 可以注意到相同字符的位置是相同的

    • 有字符的地址

  • 如果有回车这类的转义字符呢?

回车字符

  • 一个转义字符也占据一个字节

    • 序号为10

    • 字节状态为 b"\x0a"

    • 比如 回车字符\n

  • 回忆一下进制转化

    • int

    • 2进制 bin

    • 8进制 oct

    • 16进制 hex

    • 从十进制到其他进制

    • 从其他进制到十进制

  • 编码转化

    • chr

    • ord

    • 从字符转化为序号

    • 从序号转化为字符

  • 字节序列与字符串转化

    • encode

    • decode

    • 字节序列到字符串

    • 从字符串到字节序列

转义字符

  • 转义字符也占据一个字节

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

  • 如果有中文字符呢?

中文字符

  • str = “a一”

  • 总共两个字符

    • 一个是英文字符

    • 另一个是中文汉字字符

  • 对应两个位置

    • str[0] - a

    • str[1] - 一

  • 其中 a 是 ascii 字符

    • 长度为1

  • 一是 utf-8 编码的 unicode 字符

    • 作为字符的长度也为1

  • 具体占用几个字节呢?

编码

  • 首先要知道内存中的编码方式

    • 到底是utf-8

    • 还是unicode

  • 查询str的帮助

    • 发现默认编码是系统的默认编码

  • 所以在python3的运行环境下

    • 目前就是utf-8

    • str的默认编码就是系统的编码

内存情况

  • 可以看到

    • a 就是 \x61

    • 一 就是 \xe4\xb8\x80

用变量赋值

  • s1 = “oeasy”

    • oeasy

    • 这个字符串长度  5 个字节

    • s1 位于 139633377299288

  • s2 = “o2z”

    • o2z

    • 这个字符串长度 3 个字节

    • s2 位于 139633366623112

  • s2 = s1

    • 令s2 位于 id(s1)

    • s2 和 s1 都指向 原来 s1 的地址

  • 最终引用情况

    • 原来 s2 所指向

    • 现在没有变量引用了

    • 会被系统垃圾回收

    • 有两个变量引用(s1、s2)

    • 字符串"oeasy"

    • 字符串 “o2z”

注意事项

  • str 可以

    • 把数字转化为一个字符串

  • str 是类的名字

    • 但是一旦被赋值

    • 就无法转化了

  • 特别注意❗❗❗

    • 初学者要特别注意

    • 不要将str作为变量名!📢

总结

  • 这次了解的是字符串

  • 字符串就是字符的串

    • 字符串长度 可以用 len函数

    • 字符可以用下标索引 []

  • 可以用str

    • 将整型数字转化为字符串

  • 字符的长度本身有长有短

    • 都算一个字符

    • 可能对应 3 个字节

    • 都对应 1 个字节

    • ascii 包括各种 转义字符

    • unicode 字符中的汉字

    • 但不管本身是 1 字节 还是 3 字节

  • 将字符串赋给一个字符串变量

    • 就是字符串在内存中的地址

    • 这就是字符串变量的id

  • 除了字符串

    • 还有什么变量类型?🤔

  • 下次再说!👋

  • 蓝桥->https://www.lanqiao.cn/courses/3584

  • github->https://github.com/overmind1980/oeasy-python-tutorial

  • gitee->https://gitee.com/overmind1980/oeasypython


[oeasy]python0071_字符串类型_str_string_下标运算符_中括号的评论 (共 条)

分享到微博请遵守国家法律