python基础(is,id函数、缓存机制、类型转换、set与frozenset)
一、内置方法:
1.1 id 用法:
1 s = 'alex' 2 print(id(s)) # 获取内存地址
1.2 is 用法:
身份运算:判断的是两个对象的内存地址是否相同
i1 = 10 i2 = 10 print(i1 is i2) # 返回结果为bool类型
二、Python的缓存机制:
2.1 驻留机制:
同一代码块(函数模块,class, 同一个文件)代码缓存称为的驻留机制:
遇到初始化对象命令时,会先检查内存字典中是否有对应关系的变量,如果内存地址存在则满足条件,否则新建地址变量
只要是int(float),bool, 空tuple, None满足地址驻留
str: 长度*位数 不超过20个单位则满足地址驻留
1 # int: 范围 任意数字 2 i1 = 1212312312312312312312312 3 i2 = 1212312312312312312312312 4 print(i1 is i2) 5 # bool True Fasle 6 # str:几乎所有的字符串都会符合缓存机制, 7 s1 = 'fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$' 8 s2 = 'fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$' 9 print(s1 is s2) 10 # 通过相乘的形式构建的字符串长度不能超过20满足同一代码块的驻留机制. 11 s1 = 'old_' * 5 12 s2 = 'old_' * 5 13 print(s1 is s2) # True
2.2 小数据池:
2.2.1 特点:
不同代码块(交互式输入框)为代码的小数据池(内存中开辟两个内存地址空间一个为str,一个为int)
只要是int(float),bool, 空tuple, None满足地址驻留
int: -5 - 256满足小数据池地址驻留
bool, 空tuple满足地址驻留
str: 满足一定条件时满足地址驻留
2.2.2 目的:
节省内存空间.
提升性能.
三、数据类型之间的转换:
3.1 数据类型:
int bool str list tuple dict set
'''int bool str 三者转化是可以的.'''
3.2 bool 可以与所有的数据类型进行转换:
所有为空的数据类型转化成bool都为Fasle.
0 '' [] () {} None ----> Fasle
print(bool([])) # False
3.3 字符串与列表之间的转换:
1 s = '武sir alex 太白' 2 print(s.split()) # 默认切分方式为空格 3 4 5 # list ---> str join # list里面的元素全部都是str类型 6 l1 = ['武sir', 'alex', '太白'] 7 print(' '.join(l1))
3.4 字符串与元组之间的转换:
1 # str ----> tuple # partition 2 s = '武sir alex 太白' 3 s1 = s.partition(' ') # ('武sir', ' ', 'alex 太白') 4 print(s1) 5 6 # tuple ---> str join 7 tu1 = ('武sir', 'alex', '太白') 8 ret = ' '.join(tu1) 9 print(ret, type(ret))
3.5 列表与元组之间的转换:
1 # list<----->tuple 2 l1 = ['武sir', 'alex', '太白'] 3 print(tuple(l1)) 4 5 tu1 = ('武sir', 'alex', '太白') 6 print(list(tu1))
3.5 字典与列表之间的转换:
字典转换成列表是单向转换,字典的键转换成新的列表,值丢弃
1 # dict ----> list 2 dic = {'name': 'alex', 'age': 73} 3 print(list(dic))
四、set(集合):
4.1 特点:
实际上就是一种特殊的字典.
所有value都是None的字典,就是集合.
4.2 集合与字典的区分:
4.3 集合的常用操作:
4.3.1 set的创建:
1 s = set() # 创建一个新的空集合 2 print(s) 3 s = {1, 2, 3, 4, 5} # 直接创建 4 print(s) 5 6 s = set('abc') # str创建一个集合 7 s = set(['a', 'b', 'c']) # list创建一个集合 8 s = set(('a', 'b', 'c')) # tuple创建一个集合 9 s = set({'name': 'andy', 'age': 1}) # dict创建一个集合 10 print(s)
4.3.2 python中set方法查询:
[x for x in dir(set) if not x.startswith(‘_’)]
4.3.3 set的增删改查:
1 # 增: 2 # add:如果元素存在,没有做任何动作. 3 s = {1, 2, 3} 4 s.add(4) 5 print(s) 6 7 # 删: 8 s = {1, 2, 3} 9 s.pop() # 从集合中删除(弹出)一个元素,如果集合为空,报错 10 s.discard(3) # 从集合中删除指定的元素,如果不存在,什么都不执行 11 s.remove(2) # 从集合中删除指定元素,如果不存在,报错 12 s.clear() # 清空集合 13 print(s) 14 15 # 改: 16 s1 = {1, 2, 3} 17 s2 = {3, 4, 5} 18 s1.union(s2) # 用二者的并集更新当前集合 19 s1.difference_update(s2) # 用二者的差集更新当前集合 20 s1.intersection_update(s2) # 用二者的交集更新当前集合 21 s1.symmetric_difference_update(s2) # 用二者的对称差集更新当前集合 22 print(s1) 23 24 # 判断功能: 25 s1 = {1, 2, 3} 26 s2 = {3, 4, 5} 27 print(s1.isdisjoint(s2)) # isdisjoint:判断两个集合是否没有交集 28 print(s1.issubset(s2)) # issubset:判断当前集合是否是后者的子集 29 print(s1.issuperset(s2)) # issuperset:判断后者是否是当前集合的子集 30 31 # 查: 32 # 集合基本没有单独取其中元素的需求.
4.3.4 set的四大运算操作:
1 # # 集合的四大常用操作: 2 # 并,交,差,对称差 3 # 有简化写法: 4 # 并:| 5 # 交:& 6 # 差:- 7 # 对称差:^ 8 9 s1 = {1, 2, 3} 10 s2 = {3, 4, 5} 11 print(s1.union(s2)) # 并集 12 print(s1.intersection(s2)) # 交集 13 print(s1.difference(s2)) # 差集 14 print(s1.symmetric_difference(s2)) # 对称差
五、frozenset(冷冻集合)
5.1 创建冷冻集合:
1 # 创建frozenset: 2 s = frozenset() # 创建一个新的空集合 3 print(s) 4 5 s = frozenset('abc') # str创建一个集合 6 s = frozenset(['a', 'b', 'c']) # list创建一个集合 7 s = frozenset(('a', 'b', 'c')) # tuple创建一个集合 8 s = frozenset({'name': 'andy', 'age': 1}) # dict创建一个集合 9 print(s)
5.2 冷冻集合的四大方法:
并,交,差,对称差方法与集合的数据方法相同
两种数据类型可以混用,方法的主调者的类型决定了最终结果的类型
1 s1 = {1, 2, 3} 2 s2 = frozenset([3, 4, 5]) 3 print(s1 | s2) # union 4 print(s1 & s2) # intersection 5 print(s1 - s2) # difference 6 print(s1 ^ s2) # symmetric_difference
5.3 冷冻集合可以与集合之间可以相互转换:
1 s1 = {1, 2, 3} 2 print(frozenset(s1)) # 把集合转换为冷冻集合 3 print(set(frozenset(s1))) # 把冷冻集合转换为集合