python的数据对象常用法法以及双下方法总结

1 列表和元祖的方法和属性,不包含object类支持的方法

 
  列表 元祖  
s1.__add__(s2) y y s1+s2 拼接
s1.__iadd__(s2) y   s1+=s2 就地拼接
s.append(e) y   尾部追加元素
s1.clear() y   清除所有元素
s1.__contains__(e) y y s1是否包含e
s.copy() y   列表浅copy
s.count(e) y y e在s中的次数统计
s.__delitem__(p) y   把s中索引位置为p的元素删掉
s.extend(it) y   把可迭代对象it追加给s
s.__getitem__(p) y y s[p],获取s中索引位置为p的元素
s.__getnewargs__()   y 在pickle中支持更加优化的序列化
s.index(e) y y 在s中找到元素第一次出现的索引位置
s.insert(p,e) y   把元素e插入到p的索引位置
s.__iter__() y y 返回s的迭代器
s.__len__() y y len(s) 元素的数量
s.__mul__() y y s*=n,n个s的重复拼接
s.__imul__(n) y   s*=n,就地拼接
s.__rmul__(n) y y 反向拼接
s.pop(p) y   默认删除最后一个值,或者指定的p索引位置的值,并且有返回值
s.remove(e) y   删除s中第一次出现的e元素
s.reverse() y   就地把s内的元素倒序排序,元祖虽然没有这个方法,但是reverse(tuple)
s.__reversed__() y   返回s的倒序迭代器
s.__setitem__(p,e) y   s[p]=e,赋值
s.sort([key],[reverse]) y   就地对s中水元素进行排序,可迭代的参数有key和reverse

 

 

 

 

 

2 dict collections.defaultdict collections.orderdict这三种映射类型的方法列表,不包含object常见方法

  dict defaultdict orderdict 备注
d.clear() y y y 删除所有元素
d.__contains__() y y y 检查k是否在d中
d.copy() y y y 字典浅拷贝
d.__copy__()   y   用于支持copy.copy
d.default.factory   y   在__missing__函数中被调用的函数,用于给未找到的元素设置值
d.__delitem__(k) y y y 将迭代器it里的元素设置为映射里的键
d.fromkeys(it,[initial]) y y y 如果有inital参数,就把它作为这些键对应的值(默认为None)
d.get(k,default) y y y 返回字典中k对应的值,如果没有就返回defalut
d.__getitem__(k) y y y 让字典d能以d[k]对应的值
d.items() y y y 返回字典中所有的键值对
d.__iter__() y y y 返回键的迭代器
d.keys() y y y 返回字典中所有的键
d.__len__() y y y 返回字典中所有的减值
d.__miss__(k)   y   当__getitem__()方法无法找到值得时候,该方法会调用
d.move_to_end(k,[last])     y 把键为k的元素移动到字典的最前或最后,last默认为true
d.pop(k,[defalut]) y y y 删除元素,如果找不到这个k那么返回None或defalut
d.popitem() y y y 随机返回一个减值对并且删除它
d.__reversed__() y y y 返回倒序的键的迭代器
d.setdefault(k,[default]) y y y 如果字典中有k,则返回k对应的v,如果没有则d[k]=defalut,并且返回defalut
d.__setitem__(k,v) y y y 实现d[k]=v,赋值
d.update(m,[**kwargs]) y y y 更新,如果字典中存在k重复则更新,如果没有就追加
d.values() y y y 返回字典中所有的值

 

 

 

 

 

 

 

 

 

__missing__()特殊方法,所有的映射类型在处理找不到的键的时候,都会牵扯到__missing__()。基类中dict并没有定义这个方法,但是dict是知道这个这个方法的存在的,如果一个类继承了dict,然后这个继承类提供了__missing__()方法,那么在__getitem__()找不到值得时候,就会python解释器就会自动调用__missing__()

class str_key_dict(dict):
    def __missing__(self, key):
        if isinstance(key,str):
            raise KeyError(key)
        return self[str(key)]
    def get(self,key,default=None):
        try:
            return self[key]
        except KeyError:
            return default
    def __contains__(self, key):
        return key in self.keys() or str(key) in self.keys()

 

3 其他内置双下方法:

 

__len__ 返回长度,必须返回int类型的返回值
__str__ print str时触发,需要有一个字符串类型的返回值,如果__str__和__repr__同时存在,则先调用__str__
__repr__

repr触发,同__str__一样,但是信息更加详细,只是str更适合阅读,repr返回的信息更加精准,可以显式的使用!r或repr执行调用

__repr__

__init__ 类的实例化 初始化方法
__new__ 创建一个对象,类在实例化时,默认执行object的__new__方法,用于构建self
__hash__ 调用hash()方法判断是否可以被hash时触发,set就依赖__hash__和__eq__,set的实现,依赖对象hash eq方法先调用hash,拿到hash值在调用eq
__call__ 对象或者方法后加括号调用时触发
__eq__ 判断2个值是否相等
__del__ 析构函数,del触发,在删除一个对象之前进行一些收尾工作
__delitem__ 支持字典的删除,查看字典源码,也是这样写的,包含列表
__name__ 类的名字
__doc__ 类的文档字符串(注释)
__base__ 类的第一个父类
__bases__ 类的所有父类
__dict__ 类的字典属性
__module__ 类定义所在的模块
__class__ 实例对应的类

 

单例模式

__new__   单例模式
#        一个类始终只有一个实例 限制一个类从头到尾只有一个实例
#        当你之后再来实例化的时候看就用之前创建的对象
 
# class b:
#     __insta=False
#     def __init__(self,name,age):
#         self.name=name
#         self.age=age
#     def __new__(cls, *args, **kwargs):
#         '''
#         在外部实例化该类的时候,回执行类中的双下new方法
#         通过判断_insta的真假,返回不同的返回值,在第一次
#         实例化该类的时候,其实通过在类的内部改变了私有__insta的方法
#         当下次再实例化调用时,就返回已经变更过的私有__insta方法
#
#         '''
#         if cls.__insta:
#             return cls.__insta
#         cls.__insta=object.__new__(b)
#         return cls.__insta
# egon=b('agg',38)
# nezha=b('nazha',25)
# print(nezha)
# print(egon)
# print(nezha.name)
# print(egon.name)

  

python中垃圾回收机制

  1 引用计数:

    cpython中,垃圾回收使用的主要算法是引用计数,实际上每个对象都会统计有多少应用指向自己,当引用计数归0,对象就销毁了:cpython会在对象上调用__del__方法(如果定义了),然后释放分配给对象的内存,但是需要注意的是有时候即使引用计数归零,cpython也不会立即调用__del__()方法,比如一组对象之间全部是相互应用,那么即使在牛逼的引用方式也会导致组中的对象不可以获取,当然python另外有更加复杂的垃圾回收程序来处理这样的事情

  2 标记清除

  3 分代回收

  

 

posted @ 2020-10-13 12:43  Yuan_x  阅读(164)  评论(0编辑  收藏  举报