enable_merge_strategies#
- astropy.utils.metadata.enable_merge_strategies(*merge_strategies)[源代码]#
上下文管理器临时启用一个或多个自定义元数据合并策略。
- 参数:
- *merge_strategies :
MergeStrategy
MergeStrategy
将启用的合并策略。
- *merge_strategies :
实例
在这里,我们定义了一个定制的合并策略,它在左右两边使用一个int或float,并返回一个包含两个值的列表。
>>> from astropy.utils.metadata import MergeStrategy >>> class MergeNumbersAsList(MergeStrategy): ... types = ((int, float), # left side types ... (int, float)) # right side types ... @classmethod ... def merge(cls, left, right): ... return [left, right]
通过定义这个类,合并策略被自动注册为可用于合并。但是,默认情况下,新的合并策略是 未启用 . 这可以防止无意中更改正在执行元数据合并操作的无关代码的行为。
为了使用新的合并策略,请使用此上下文管理器,如下例所示:
>>> from astropy.table import Table, vstack >>> from astropy.utils.metadata import enable_merge_strategies >>> t1 = Table([[1]], names=['a']) >>> t2 = Table([[2]], names=['a']) >>> t1.meta = {'m': 1} >>> t2.meta = {'m': 2} >>> with enable_merge_strategies(MergeNumbersAsList): ... t12 = vstack([t1, t2]) >>> t12.meta['m'] [1, 2]
可以提供进一步的合并策略作为上下文管理器的附加参数。
为了方便起见,启用操作实际上是通过检查注册的策略是否是上下文管理器参数的子类来完成的。这意味着可以定义一组相关的合并策略,然后通过启用基类一次启用它们。作为一个微不足道的例子, all 注册的合并策略可以通过以下方式启用:
>>> with enable_merge_strategies(MergeStrategy): ... t12 = vstack([t1, t2])