Python之第七天的努力--基础数据类型补充,编码进阶

01 回顾

1.id == is

  • == :数值是否相同
  • is:内存地址
  • id:获取对象的内存地址

2.代码块:一个文件,交互式命令一行就是一个代码块

3.同一代码块下缓存机制(字符串驻留机制):

  • 所以数字,bool,几乎所有的字符串
  • 优点:提升性能,节省空间

4.不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间储存-5~256的int,一个空间储存一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。

  • -5~256 int bool 满足一定规则的字符串
  • 优点:提升性能,节省空间

5.集合:列表去重,关系测试 交并差。

6.深浅copy:

  • 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素公用一个。
  • 深copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),里面的不可变数据沿用之前的,不可变数据类型创建新的。

02 基础数据类型补充

1.str

# str  补充
# s1 = ‘pyThon‘

# capitalize   首字母大写,其余变小写
# print(s1.capitalize())

# swapcase   大小写翻转
# print(s1.swapcase())

# title     每个单词的首字母大写
# msg = ‘zs say hi‘
# print(msg.title())

# center   居中
# s1 = ‘pyThon‘
# print(s1.center(20,‘*‘))

# find:通过元素找索引,找到第一个就返回,找不到返回-1
# index:通过元素找索引,找到第一个就返回,找不到 报错
# s1 = ‘pyThon‘
# print(s1.find(‘o‘))
# print(s1.index(‘a‘))

2.tuple

# tuple
# 元组中只有一个元素,并且没有逗号,那么他就不是元组,它与该元素的数据类型一致。
# tu1 = (2)
# print(tu1,type(tu1))
# tu2 = (‘hhh‘)
# print(tu2,type(tu2))
# tu3 = (‘hhh‘,)
# print(tu3,type(tu3))

# count
# tu = (1,2,2,2,2,3,3,2,)
# print(tu.count(2))

# index
# tu = (‘zs‘,‘ls‘,‘ww‘)
# print(tu.index(‘ww‘))

3.list

# list
# count


# index
# l1 = [‘zs‘,‘ls‘,‘ww‘,‘kk‘]
# print(l1.index(‘ww‘))


# sort  **
# l1 = [5,4,3,7,8,6,1,9]
# l1.sort()     # 默认从小到大排序
# l1.sort(reverse=True)   # 从大到小排序
# l1.reverse()    # 反转
# print(l1)


# 列表之间可以相加
# l1 = [1,2,3]
# l2 = [1,2,3,‘zs‘,‘ls‘,‘ww‘]
# print(l1 + l2)


# 列表与数字相乘
# l1 = [1,‘hhh‘,3]
# l2 = l1*3
# print(l2)


l1 = [11,22,33,44,55]
# 索引为奇数对应的元素删除(不能一个一个删除,此11只是例子,里面的元素未定)
# 正常思路:
# 先将所有索引整出来。
# 加以判断
# for index in range(len(l1)):
#     if index % 2 == 1:
#         l1.pop(index)
# print(l1)
# 列表的特性  错误

# 最简单
# del l1[1::2]
# print(l1)

# 倒序法删除
# for index in range(len(l1)-1,-1,-1):
#     if index % 2 == 1:
#         l1.pop(index)
# print(l1)

# 思维置换
# new_l1 = []
# for index in range(len(l1)):
#     if index % 2 == 0:
#         new_l1.append(l1[index])
# l1 = new_l1
# print(l1)

# 循环一个列表时,最好不要改变列表的大小,这样会影响最后的结果

4.dict

# dict
# updata  ****
# dic = {‘name‘:‘zs‘,‘age‘:18}
# dic.update(hobby=‘魔方‘,hight=‘175‘)  # 增加键值对
# dic.update(name=‘ls‘)   # 修改
# dic.update([(1,‘a‘),(2,‘b‘),(3,‘c‘)])  #
# print(dic)

# dic1 = {‘name‘:‘zs‘,‘age‘:18,‘sex‘:‘male‘}
# dic2 = {‘name‘:‘kk‘,‘weight‘:65}
# dic1.update(dic2)    # 更新
# print(dic1)
# print(dic2)

5.formkeys

# fromkeys
# dic = dict.fromkeys(‘abc‘,100)           # {‘a‘: 100, ‘b‘: 100, ‘c‘: 100}
# dic = dict.fromkeys([1,2,3],‘hhh‘)     # {1: ‘hhh‘, 2: ‘hhh‘, 3: ‘hhh‘}
# 坑:值共用一个
# dic = dict.fromkeys([1,2,3],[])
# dic[1].append(666)        # {1: [666], 2: [666], 3: [666]}
# print(dic)

# dic = {‘k1‘:‘zs‘, ‘k2‘:‘ls‘, ‘k3‘:‘ww‘, ‘age‘:18}
# 将字典中键含有‘k‘元素的键值对删除
# for key in dic:
#     if ‘k‘ in key:
#         dic.pop(key)
# print(dic)                       # 报错

# 循环一个字典时,如果改变这个字典的大小,就会报错

# l1 = []
# for key in dic:
#     if ‘k‘ in key:
#         l1.append(key)
# print(l1)
# for i in l1:
#     dic.pop(i)
# print(dic)

# for key in list(dic.keys()):
#     if ‘k‘ in key:
#         dic.pop(key)
# print(dic)

03 数据类型转换补充

# 0,‘‘,(),[],set(),None -----bool---False

04 编码的进阶

  • ASCLL码:包含英文字母,数字,特殊字符与01010101对应关系

    a 01000001 一个字符一个字节表示

  • GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系

    a 01000001 ascill码中的字符:一个字符一个字节表示

    中 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 亚洲文字;一个字符三个字节表示。

  1. 不同的密码本之间能否互相识别?不能。
  2. 数据在内存中全部是以Unicode编码的。但是当数据用于网络传输或者储存到硬盘中,必须是以非Unicode编码(utf-8或gbk..)。

英文:

? str:‘hello’

? 内存中的编码方式:Unicode

? 表现形式:‘hello’

Python之第七天的努力--基础数据类型补充,编码进阶

? bytes:

? 内存中的编码方式:非Unicode

? 表现形式:b‘hello’

中文:

? str:‘中国‘

? 内存中的编码方式:Unicode

? 表现形式:‘hello’

? bytes:

? 内存中的编码方式:非Unicode # Utf-8

? 表现形式:b‘\xe4\xb8\xad\xe5\x9b\xbd‘

相关推荐