modelx.cached#

cached(space=None, name=None, is_cached=None, *funcs)#

用于从Python函数创建或更新单元格的装饰器。

注意

cached()defcells() 的别名。

这个便捷函数作为装饰器,可直接从Python函数定义创建新单元格或更新现有单元格的公式。它替代了手动调用父空间上的new_cells()set_formula()的需求,也无需设置formula属性。

示例

1. 作为无参数的装饰器

以下代码在当前空间创建一个名为foo的单元格。 如果当前空间中已存在foo,则更新其公式。

如果当前空间不存在,将创建一个新空间。 如果当前模型不存在,也会创建一个新模型:

>>> import modelx as mx

>>> @mx.defcells
... def foo(x):
...     return x

>>> foo
<Cells Model1.Space1.foo(x)>

如果当前空间中已存在同名的单元格,则根据装饰函数更新其公式:

>>> bar = foo

>>> @mx.defcells
... def foo(x):
...     return 2 * x

>>> foo is bar
True

2. 作为带参数的装饰器

以下代码在指定空间中创建一个名为"bar"的未缓存单元格。 如果指定空间中已存在名为"bar"的单元格, 则更新其公式和is_cached属性:

>>> space = mx.new_space("Foo")

>>> @mx.defcells(space=space, name='bar', is_cached=False)
... def foo(x):
...     return x

>>> foo
<Cells Model1.Foo.bar(x)>

>>> foo.is_cached
False

3. 作为函数

从多个函数定义创建多个单元格:

def foo(x):
    return x

def bar(y):
    return foo(y)

foo, bar = defcells(foo, bar)
Parameters:
  • space (可选) – 对于用法2,指定创建单元格的空间。默认为当前模型的当前空间。

  • name (可选) - 对于用法2,指定创建的单元格名称。默认为函数名称。

  • is_cached (可选) – 对于用法2,一个布尔值,表示是否应缓存单元格。默认情况下,创建新单元格时为True,更新现有单元格时为False

  • *funcs – 对于用法3,函数对象。(spacename 在此用法中也可以接受函数对象。)

Returns:

对于用法1和2,将返回新创建的单单元格。 对于用法3,将返回新创建的单元格列表。

另请参阅

uncached()

在0.27.0版本中变更:cached() 被引入作为别名。

在0.27.0版本中变更:引入了is_cached参数。

版本 0.1.0 变更:如果当前空间不存在,将创建一个新空间。 如果当前模型不存在,将创建一个新模型。

版本0.1.0变更:如果当前空间中已存在同名单元格,则基于装饰函数更新其公式。