也许是一个愚蠢的问题:) 我有两个Django应用程序, 我需要其中一个使用另一个的功能而不导入它们。 好像我正在使用API请求它们,有没有办法可以获得一个函数的实例并使用它,我不想做以下事情:
response = requests.get('HTTP://URL/example/', data)
data = response.json()
我想要做这样的事情
function = requests.get('HTTP://URL/example/')
并执行以下功能
data = function()
感谢
答案 0 :(得分:0)
您可以使用marshal
模块序列化功能代码,将其添加为请求内容并在其他应用程序中反序列化。
In [13]: def foo(a, b):
print a + b
....:
In [14]: import marshal
In [15]: a = marshal.dumps(foo.func_code)
In [16]: a
Out[16]:
'c\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00C\x00\x00\x00s\r\x00\x00\x00|\x00\x00|\x01\x00\x17GHd\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x01\x00\x00\x00at\x01\x00\x00\x00b(\x00\x00\x00\x00(\x00\x00\x00\x00s\x1f\x00\x00\x00<ipython-input-13-a0f238eac2f8>t\x03\x00\x00\x00foo\x01\x00\x00\x00s\x02\x00\x00\x00\x00\x01'
另一位翻译:
In [13]: import marshal, types
In [14]: a = marshal.loads('c\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00C\x00\x00\x00s\r\x00\x00\x00|\x00\x00|\x01\x00\x17GHd\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x01\x00\x00\x00at\x01\x00\x00\x00b(\x00\x00\x00\x00(\x00\x00\x00\x00s\x1e\x00\x00\x00<ipython-input-1-a0f238eac2f8>t\x03\x00\x00\x00foo\x01\x00\x00\x00s\x02\x00\x00\x00\x00\x01')
In [15]: types.FunctionType(a, globals(), 'foo')(1, 2)
3
但是,您需要确保在执行之前没有人会向您发送恶意代码。另请注意,您将无法访问函数原始模块中定义的任何全局变量。
一般来说,我不推荐这种方法。最好只使用RestAPI来获得您想要的结果,而不是传递函数。