python基础(is,id函数、缓存机制、类型转换、set与frozenset)

一、内置方法:

  1.1 id 用法:

  
1 s = 'alex'
2 print(id(s))  # 获取内存地址
View Code

  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
View Code

  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))
View Code

  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))
View Code

  3.5 列表与元组之间的转换:

  
1 # list<----->tuple
2 l1 = ['武sir', 'alex', '太白']
3 print(tuple(l1))
4 
5 tu1 = ('武sir', 'alex', '太白')
6 print(list(tu1))
View Code

  3.5 字典与列表之间的转换:

    字典转换成列表是单向转换,字典的键转换成新的列表,值丢弃

  
1 # dict ----> list
2 dic = {'name': 'alex', 'age': 73}
3 print(list(dic))
View Code

四、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)
View Code

    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 # 集合基本没有单独取其中元素的需求.
View Code

    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))   # 对称差
View Code

五、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)
View Code

  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
View Code

  5.3 冷冻集合可以与集合之间可以相互转换:

  
1 s1 = {1, 2, 3}
2 print(frozenset(s1))   # 把集合转换为冷冻集合
3 print(set(frozenset(s1)))   # 把冷冻集合转换为集合
View Code

 

posted @ 2019-03-23 16:51  Amorphous  阅读(682)  评论(0编辑  收藏  举报