将编码函数转换为JSON格式

3

我有一个数组,其中包含来自operator模块的元素。 我尝试使用JSON存储它,但是出现了以下错误消息。

import operator as op
import json
array = [1,op.ge]
json_encoded = json.dumps(array)
f = open("test.json","w")
f.write(json_encoded)
f.close()

TypeError: <内置函数 ge> 无法进行 JSON 序列化

有没有解决方法或其他存储方式?


4
您想将一个函数存储为JSON?为什么呢? - user1907906
嗨Lutz,我正在随机生成函数并选择表现最佳的一个,因此需要一种存储它的方法;) - Ahdee
你是如何生成它们的?你将它们写入Python文件中吗? - user1907906
@LutzHorn - 我随机选择运算符、数字等,并将它们组合成字典或数组。最佳表现者被选中并进行变异。在 PERL 中,我会使用 eval,但现在正在学习 Python,每个变量都被放置为条件。不确定这是否有意义,但似乎正在起作用。 - Ahdee
1个回答

7
您可以使用pickle模块,它可以序列化对象:pickle.dumps
import pickle
...
pickle_encoded = pickle.dumps(array)
...

Pickle会写入一个字节流,与JSON不同的是它不可读。

糟糕!你刚好比我快了 :) - Demian Brecht
不幸的是,我不确定这种方法总是有效的...如果你尝试它,它只是将函数名称存储在pickle文件中。所以它对于内部使用是有效的,但如果它是你自己的函数,重新加载到新会话中将指向一个函数,但该函数可能尚未被导入。如果他试图滥用这个来存储过程,那么它可能不起作用... - Corley Brigman
@CorleyBrigman - 感谢您的提示;我将使用存储的数据在运行时构建函数,因此我认为这应该可以工作。 - Ahdee
如果是这样的话,也许你可以存储名称 - 存储一个字符串与名称,并在创建它们时创建一个字符串到函数对象的字典。你的代码需要稍微改变一下,调用f_dict[f_name]而不是直接调用f_name(),但这只是小问题... - Corley Brigman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接