当前位置: 首页 > 面试题库 >

不能腌制defaultdict

许华清
2023-03-14
问题内容

我有一个defaultdict看起来像这样:

dict1 = defaultdict(lambda: defaultdict(int))

问题是,我不能使用cPickle腌制它。我在这里找到的解决方案之一是使用模块级函数而不是lambda。我的问题是,什么是模块级功能?如何在cPickle中使用字典?


问题答案:

除了Martijn的解释之外:

模块级函数是在模块级定义的函数,这意味着它不是类的实例方法,它不嵌套在另一个函数中,并且它是带有名称的“真实”函数,而不是lambda函数。

因此,要腌制您的代码defaultdict,请使用模块级功能(而不是lambda函数)创建它:

def dd():
    return defaultdict(int)

dict1 = defaultdict(dd) # dd is a module-level function

比你可以腌的多

tmp = pickle.dumps(dict1) # no exception
new = pickle.loads(tmp)


 类似资料:
  • 问题内容: Python的pickle(我在这里说的是标准的Python 2.5 / 2.6 / 2.7)不能腌制锁,文件对象等。 它也不能腌制生成器和lambda表达式(或任何其他匿名代码),因为腌制实际上仅存储名称引用。 在锁和依赖于操作系统的功能的情况下,原因 为何 你不能咸菜他们是明显的,是有道理的。 但是 为什么不能腌制发电机呢? 注 :只是为了清楚起见, -我有兴趣的根本原因(或假设和

  • 下面链接的文档似乎表明可以对顶级类及其实例进行pickle处理。但根据我对前一个问题的回答来看,这似乎不正确。在我发布的脚本中,pickle接受类对象并写入文件,但这没有用。 这是我的问题:这个文档是错误的,还是有更微妙的东西我不明白?另外,在这种情况下,泡菜是否应该生成某种错误消息? https://docs . python . org/2/library/pickle . html # wh

  • 问题内容: Windows上的Python 3.5,请尝试以下操作: 引发异常: multiprocessing.Process的子类抛出相同的异常: 问题答案: 这样的事情应该起作用: 基本上,a需要a ,并且由于任何原因,实例被腌制时都不会保存(例如,不在方法中)。如果您需要更多的状态(即其他并从方法),那么你就需要从扩展的返回值上述功能。(请注意,如果您使用的是python 2.x,则相应的

  • 我用PHPass散列密码已经很久了。我承认仍然有一些我不完全理解(或忽略)的东西来正确地散列密码,所以今天我查看了所有我能找到的关于它的信息。 回顾PHPass文档,我已经进入了这个: 除了实际的哈希之外,phpass 在对新密码或密码进行哈希处理时会透明地生成随机 salt,并将哈希类型、salt 和密码拉伸迭代计数编码到它返回的“hash 编码字符串”中。当phpass根据存储的哈希对密码或密

  • 问题内容: 我有一个从腌制文件中导入数据的应用程序。它在Windows中可以正常工作,但Mac和Linux的行为很奇怪。 在OS X中,除非将文件类型设置为。,否则腌制的文件(文件扩展名“ .char”)不可用。然后,如果我选择一个扩展名为.char的文件,它将无法加载,并显示错误消息 ValueError:无法将字符串转换为浮点型 但是,如果我创建的文件没有.char扩展名,则该文件将正常加载。

  • 问题内容: 最近,有人提出了一些Python代码试图通过使用腌制过程促进分布式计算的问题。显然,该功能在历史上是可能的,但是出于安全原因,该功能被禁用。第二次尝试通过套接字传输功能对象时,仅传输了引用。如果我错了,请纠正我,但我不认为此问题与Python的后期绑定有关。假定不能腌制进程和线程对象,是否有任何方法可以传输可调用对象?我们希望避免为每个作业传输压缩的源代码,因为这可能会使整个尝试变得毫