python - 用于酸洗的嵌套函数的替代方案
问题描述
我有一段代码可以从许多较小的函数生成一个函数,同时让最外面的函数接受一个参数x
。
换句话说,我有一个输入x
,我需要对其进行各种转换,这些转换x
是在运行时决定的。
这是通过迭代调用这个函数来完成的(它本质上是将一个函数包装在另一个函数中)。
这是功能:
def build_layer(curr_layer: typing.Callable, prev_layer: Union[typing.Callable, int]) -> typing.Callable:
def _function(x):
return curr_layer(prev_layer(x) if callable(prev_layer) else x)
return _function
旁注:如您所见,prev_layer
它是否不可调用,它被替换为输入x
,所以我使用虚拟整数来指示输入的去向。
问题: 无法腌制此代码。 我似乎无法想出一种方法来重写这段代码,使其变得可腌制。
注意:我需要将此对象保留在磁盘上,但也需要将其用于多处理中,其中它为 IPC 腌制(这些功能在那里不使用,因此从技术上讲它们可以移动)
我还有这个函数的更复杂版本,它处理多个输入(在这种情况下使用固定聚合函数torch.cat
)我知道这两个可以合并到一个通用函数中,一旦我让它工作,我就会这样做。
这是第二个函数的代码:
def build_layer_multi_input(curr_layer: typing.Callable, prev_layers: list) -> typing.Callable:
def _function(x):
return curr_layer(torch.cat([layer(x) if callable(layer) else x for layer in prev_layers]))
return _function
解决方案
我通过将这些函数的返回值附加到这个线程中描述的类实例来解决这个问题。
推荐阅读
- java - 在 GCP 中按机器类型过滤
- node.js - `prefix ~/.npm-packages` 是否与 `prefix=${HOME}/.npm-packages` 相同
- javascript - 浏览器在用户提交表单之前擦除表单数据
- codenameone - 显示包含 PDF 链接的空白页
- javascript - 如何正确比较 javascript 中的两个图像?
- python-2.7 - with open(src, 'rb') as fsrc: IOError: [Errno 22] invalid mode ('rb') or filename:
- javascript - Node.js 数组到带有换行符的文本
- http - 授权标头
- python-3.x - 以下帮助语句中的“/”是什么意思:__init__(self, /, *args, **kwargs)?
- android - 将程序从旧的 Android Studio 版本迁移到新版本的正确方法是什么?