回忆上次内容
-
上次 分辨了
-
静态类型 语言
-
动态类型 语言
-
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 类的对象
-
指向五个字符连成的串
-
每个字符都有自己的字节
-
这些字节都在什么位置呢?
字符位置
-
字符串
-
有字符串的地址
-
下标索引到的字符
-
有字符的地址
-
可以注意到相同字符的位置是相同的
-
如果有回车这类的转义字符呢?
回车字符
-
一个转义字符也占据一个字节
-
比如 回车字符\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
内存情况
-
可以看到
-
a 就是 \x61
-
一 就是 \xe4\xb8\x80
用变量赋值
-
s1 = “oeasy”
-
这个字符串长度 5 个字节
-
oeasy
-
s1 位于 139633377299288
-
s2 = “o2z”
-
这个字符串长度 3 个字节
-
o2z
-
s2 位于 139633366623112
-
s2 = s1
-
令s2 位于 id(s1)
-
s2 和 s1 都指向 原来 s1 的地址
-
最终引用情况
-
字符串"oeasy"
-
有两个变量引用(s1、s2)
-
字符串 “o2z”
-
原来 s2 所指向
-
现在没有变量引用了
-
会被系统垃圾回收
注意事项
-
str 可以
-
把数字转化为一个字符串
-
str 是类的名字
-
但是一旦被赋值
-
就无法转化了
-
特别注意❗❗❗
-
初学者要特别注意
-
不要将str作为变量名!?
总结
-
这次了解的是字符串
-
字符串就是字符的串
-
字符串长度 可以用 len函数
-
字符可以用下标索引 []
-
可以用str
-
将整型数字转化为字符串
-
字符的长度本身有长有短
-
ascii 包括各种 转义字符
-
都对应 1 个字节
-
unicode 字符中的汉字
-
可能对应 3 个字节
-
但不管本身是 1 字节 还是 3 字节
-
都算一个字符
-
将字符串赋给一个字符串变量
-
这就是字符串变量的id
-
就是字符串在内存中的地址
-
除了字符串
-
还有什么变量类型??
-
下次再说!?
-
蓝桥->https://www.lanqiao.cn/courses/3584
-
github->https://github.com/overmind1980/oeasy-python-tutorial
-
gitee->https://gitee.com/overmind1980/oeasypython