Model.new_module#

Model.new_module(name, path, module)#

将用户模块分配给引用,关联一个新的ModuleData对象

本模块将一个模块module分配给引用namemodule可以是模块文件的路径,也可以是一个模块对象。当传入模块对象时,需要能够获取该模块的源代码。 模块的源代码会在模型保存时保存到path指定的文件中。 系统会创建一个新的ModuleData对象,并将其作为_mx_dataclient属性插入到模块中。 通过此方法关联的模块不会注册到sys.modules中,除非它之前已被注册过。 当包含的模型被重新读取时,模块的名称会被设置为 module>

此方法不应用于Python标准库或已在sys.modules中注册的第三方包模块,例如mathnumpypandas。对于这类模块,应使用常规赋值操作,例如space.np = np

示例

假设以下代码保存在当前目录下的“sample.py”文件中。

def triple(x)
    return 3 * x

以下代码在 space 中创建了一个名为 "foo" 的引用:

>>> space.new_module("foo", "modules/sample.py", "sample.py")

该模块在space中可通过foo访问:

>>> space.foo
<module 'sample' from 'C:\path\to\samplemodule.py'>

>>> @mx.defcells(space)
... def bar(y):
        return foo.triple(y)

>>> space.foo.bar(3)
9

model作为space的最终父模型。接下来的代码会在当前目录下创建一个名为"model"的目录,并在"model"目录中,按照该方法path参数的指定,将模块以"sample.py"的形式保存在"model"目录的"modules"子目录下。

>>> model.write("model")
Parameters:
  • name (str) – 引用的名称

  • path – 要保存模块的文件路径。如果给出的是相对路径,则相对于模型文件夹。

  • module – 模块文件的路径,可以是字符串或类似路径的对象,或者是一个模块对象。

在版本0.13.0中添加。