使 Python 对象可序列化的函数


from copy import deepcopy
from str import basestring

def enserializable(model):
    """
    本函数用于将对象可序列化,且返回的字典都是新的(deepcopy)
    """
    if isinstance(model, dict):
        model = deepcopy(model)
        to_pop = []
        for k in model:
            # 过滤
            if isinstance(k, basestring) and (k.startswith(‘_‘) or k.isupper()):
                to_pop.append(k)
                continue
            # 递归
            else:
                model[k] = enserializable(model[k])
        for k in to_pop:
            model.pop(k)
        return model
    elif hasattr(model, ‘__dict__‘):
        return enserializable(model.__dict__)
    elif isinstance(model, (list, tuple)):
        return [enserializable(m) for m in model]
    else:
        return model
时间: 2025-01-01 23:14:21

使 Python 对象可序列化的函数的相关文章

python 学习笔记day03-python基础、python对象、数字、函数

python基础 语句和语法 注释及续行 首要说明的是:尽管python可读性最好的语言之一,这并不意味者程序员在代码中就可以不写注释 和很多UNIX脚本类似,python注释语句从#字符开始 注释可以在一行的任何地方开始,解释器会忽略掉该行#之后的所有内容 一行过长的语句可以使用反斜杠\分解成几行 缩进及代码组 缩进相同的一组语句构成一个代码块,称之为代码组 首行以关键字开始,以冒号:结束,该行之后的一行或多行代码构成代码组 如果代码组只有一行,可以将其直接写在冒号后面,但是这样的写法可读性差

pickle和cPickle:Python对象的序列化

目的:Python对象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets).此过程也调用了serializing对象.代表对象的字节流之后可以被传输或存储,再重构后创建一个拥有相同特征(the same characteristics)的新的对象. cPickle使用C而不是Python,实现了相同的算法.这比Python实现要快好几倍,但是它不允许用户从Pickle派生子类.如果子类

python类库32[序列化和反序列化之pickle]

一 pickle pickle模块用来实现python对象的序列化和反序列化.通常地pickle将python对象序列化为二进制流或文件. python对象与文件之间的序列化和反序列化: pickle.dump() pickle.load() 如果要实现python对象和字符串间的序列化和反序列化,则使用: pickle.dumps() pickle.loads() 可以被序列化的类型有: * None,True 和 False; * 整数,浮点数,复数; * 字符串,字节流,字节数组; * 包

python对象序列化或持久化的方法

http://blog.csdn.net/chen_lovelotus/article/details/7233293 一.Python对象持久化方法 目前为止,据我所知,在python中对象持久化有以下几种方法: 1. 使用(dbhash/bsddb, dbm, gdbm, dumbdbm 等)以及它们的"管理器"( anydbm ).只提供了 Python 字 符串的永久性储存. 提供一个类似字典和文件的对象,可以完成字符串的永久性存储. 2. 使用marshal和pickle来序

#python基础学习模块:marshal 对象的序列化

#标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流通过网络发送到远程主机上,python有很多模块提供了序列化与反列化功能,如:marshal, pickle, cPickle等 注意: marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据格式还没有文档化,在不同版本的Python中,marsha

虚函数的使用 以及虚函数与重载的关系, 空虚函数的作用,纯虚函数->抽象类,基类虚析构函数使释放对象更彻底

为了访问公有派生类的特定成员,可以通过讲基类指针显示转换为派生类指针. 也可以将基类的非静态成员函数定义为虚函数(在函数前加上virtual) 1 #include<iostream> 2 using namespace std; 3 4 class base{ 5 public: 6 /*virtual*/ void who(){ //define this function to virtual will be normal 7 cout << "this is th

Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str()或者 repr() . >>> a = 10 >>> type(str(a)) <class 'str'> >>> type(repr(a)) <class 'str'> 但是这二者之间有什么区别呢?因

python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)

函数的动态参数 1.函数的动态参数 位置参数,默认参数 动态参数的作用 *args ? 1.能够接受不固定长度参数 ? 2.位置参数过多时可以使用动态参数 动态参数的用法: def func(*c): #形参位置上的 * 是聚会 print(*c) #函数体中的 * 就是打散 #func(1,2,3,4,5,6,7,8,9,0) **def eat(a,b,*args): #位置参数,动态位置参数** print(a,b,args) #结果:面条 包子 ('饺子', '馅饼', '馒头') pr

Python 多态 对象常用内置函数 运算符重载 对象迭代器 上下文管理

一 多态 1.什么是多态:多态不是一个具体的技术或代码.指的时候多个不同类型对象可以响应同一个方法,产生不同的结果. 2.使用多多态的好处:提高了程序的灵活性,拓展性 3.如何实现:鸭子类型 就是典型的多态 多种不同类型 使用方法一样 4.案例 class Cat(): def bark(self): print("喵喵喵") def run(self): print("四条腿跑!") def sleep(self): print("趴着睡!")