您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:pickle嵌套函数

Python:pickle嵌套函数

恐怕您不能腌制嵌套函数

pickle模块按名称序列化功能。也就是说,如果您myfunc在模块中有一个函数mymodule它只会保存名称mymodule.myfunc并在反序列化时再次查找它。(这是一个重要的安全性和兼容性问题,因为它保证了反序列化的代码函数使用自己的定义,而不是可能被破坏或作废的原始定义。)

las,pickle嵌套函数无法做到这一点,因为无法直接通过名称来寻址它们。bar例如,无法从外部访问您的函数foo

如果需要像函数一样工作的可序列化对象,则可以使用__call__方法来创建类:

class foo(object):
    def __init__(self, a):
        self.a = a
    def __call__(self, b): # the function formerly kNown as "bar"
        return self.a + b

这就像问题中的嵌套函数一样工作,应该不会对问题造成影响pickle。但是请注意,在反序列化foo实例时,需要具有相同的类定义

python 2022/1/1 18:47:45 有338人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶