day7
01 今日内容大纲
- 基础数据类型的补充
- 数据类型之间的转换
- 编码的进阶
02 昨日内容回顾以及作业讲解
- 基础数据类型的补充
- 数据类型之间的转换
- 编码的进阶
02 昨日内容回顾以及作业讲解
- id == is:
- == :数值是否相同 is:内存地址,id 获取对象的内存地址
- 代码块:一个文件,交互式命令一行就是一个代码块。
- 同一代码块下缓存机制(字符串驻留机制):
- 所有数字,bool 几乎所有的字符串
- 优点:提升性能,节省内存空间。
- 不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间存储-5~256的int,一个空间存储一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。
- -5~256 int,bool,满足一定规则的字符串。
- 优点:提升性能,节省内存空间。
- 集合:列表去重,关系测试 交并差。
- 深浅copy:
- 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素共用一个。
具体内容
数据类型的补充
str
s1 = 'taiBAi'
s1.capitalize首字母变大写,其余小写
s1.swapcase 大小写反转
s1.title 每个单词的首字母大写
find
#通过元素找索引,找到第一个就返回,找不到 返回-1
index
# index:通过元素找索引,找到第一个就返回,找不到 报错
s1.find('t')
元组tuple
元组中如果只有一个数据类型,并且没有逗号,那么它不是元组,他与该元素的数据类型一致。
tu(6)
int
count
s1.index(‘t’)
index:通过元素找索引,找到第一个就返回,找不到 报错
列表
l1 = ['太白', '123', '女神', '大壮']
count
index
列表排序
l1.sort()默认从小到大
l1.sort(reverse = True)从大到小
l1.reverse()反转
列表的相加
print(l1+l2)
列表可以和数字相乘
print(l1 * 5)
#########
l1 = [11, 22, 33, 44, 55]
# 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。
# *** 重要
# 正常思路:
# 先将所有的索引整出来。
# # 加以判断,index % 2 == 1: pop(index)
# for index in range(len(l1)):
# if index % 2 == 1:
# l1.pop(index)
# print(l1)
# 列表的特性:
# l1 = [11, 22, 33, 44, 55]
# 最简单的:
# del l1[1::2]
# print(l1)
# l1 = [11, 22, 33, 44, 55]
# # 倒序法删除元素
# for index in range(len(l1)-1,-1,-1):
# if index % 2 == 1:
# l1.pop(index)
# print(l1)
思维置换
l1 = [11, 22, 33, 44, 55]
new_l1 = []
for index in range(len(l1)):
if index % 2 ==0:
new_l1.append(l1[index])
# print(new_l1)
l1 = new_l1
print(l1)
循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。
字典
dic = {'name': '太白', 'age': 18}
dic.update(hobby='16',a='asd')#键值对 添加到字典里
print(dic)
dic1 ={'name': '太白', 'age': 18, 'hobby': '16', 'a': 'asd'}
dic.update(dic)#有则覆盖,无责添加
formkeys
dic.formkeys('qwe',45)
dic = dict.fromkeys([1, 2, 3], 'alex')
值共有一个,改1全变
循环字典时 如果对列表做出改变,则会报错
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
for i in list(dic.keys()):
if 'k' in i: dic.pop(i)
print(dic)
key 取出来再循环一次,然后改变
数据类型的转换# 0,''(),[],{},set(),None 转换成bool为false
-
编码的进阶
- ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。
a 01000001 一个字符一个字节表示。 - GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。
a 01000001 ascii码中的字符:一个字符一个字节表示。
中 01001001 01000010 中文:一个字符两个字节表示。 - Unicode:包含全世界所有的文字与二进制0101001的对应关系。
a 01000001 01000010 01000011 00000001
b 01000001 01000010 01100011 00000001
中 01001001 01000010 01100011 00000001 - UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。
a 01000001 ascii码中的字符:一个字符一个字节表示。
To 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。
中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。
-
不同的密码本之间能否互相识别?不能。
-
数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(utf-8,gbk等等)。
英文:
str: 'hello '
内存中的编码方式: Unicode
表现形式: 'hello'
bytes :
内存中的编码方式: 非Unicode
表现形式:b'hello'
中文
str:
内存中的编码方式: Unicode
表现形式:'中国'
bytes :
内存中的编码方式: 非Unicode # Utf-8表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'
str ---> bytes\
s1 = '中国'
b1 = s1.encode('utf-8') # 编码
print(b1,type(b1)) # b'\xe4\xb8\xad\xe5\x9b\xbd'
# b1 = s1.encode('gbk') # 编码 # b'\xd6\xd0\xb9\xfa' <class 'bytes'>
# bytes---->str
b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
s2 = b1.decode('utf-8') # 解码
print(s2)
gbk ---> utf-8
b1 = b'\xd6\xd0\xb9\xfa'
s = b1.decode('gbk')print(s)
b2 = s.encode('utf-8')
print(b2) # b'\xe4\xb8\xad\xe5\x9b\xbd' - ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。
04 今日总结
- 数据类型的补充: list(sort,revrse,列表的相加,乘,循环问题),dict (update 循环问题) ***
- 编码的进阶:
- bytes为什么存在?
- str --->bytes(Unicode ---> 非Unicode)
- gbk <-----> utf-8
05 预习内容
预习内容:
文件操作,博客地址:http://www.cnblogs.com/jin-xin/articles/8183203.html

浙公网安备 33010602011771号