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

是否有一种简单的方法来腌制python函数(或以其他方式序列化其代码)?

是否有一种简单的方法来腌制python函数(或以其他方式序列化其代码)?

您可以序列化函数字节码,然后在调用方上对其进行重构。所述编组模块可以用于串行化处理的代码对象,然后可将其重新组装成一个函数。即:

import marshal
def foo(x): return x*x
code_string = marshal.dumps(foo.func_code)

然后在远程过程中(在传输code_string之后):

import marshal, types

code = marshal.loads(code_string)
func = types.FunctionType(code, globals(), "some_func_name")

func(10)  # gives 100

一些警告:

元帅的格式(与此有关的任何python字节码)在主要python版本之间可能不兼容。

仅适用于cpython实现。

如果该函数引用了您需要使用的全局变量包括导入的模块,其他函数等),则也需要对它们进行序列化,或在远程端重新创建它们。我的示例只是为它提供了远程进程的全局名称空间。

您可能需要做更多的工作来支持更复杂的情况,例如闭包或生成函数

python 2022/1/1 18:35:34 有237人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

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

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

请先登录

推荐问题


联系我
置顶