有没有比下面更漂亮的方式:
import numpy as np
from numpy import ma
def foo(x):
pkg = ma if isinstance(x, ma.MaskedArray) else np
return pkg.apply_along_axis(bar, -1, x)
在尝试充分利用多态性方面,我觉得它不是 Pythonic。
编辑
上面的代码片段只是一个演示,以强调 np
和 ma
具有高度相似(有意设计)的界面(例如,apply_along_axis
),但在不同的命名空间下。
最佳答案
isinstance()
在这里很好。
如果你想使用 single-dispatch generic function,你可以将其隐式化:
from pkgutil import simplegeneric
import numpy as np
from numpy import ma
@simplegeneric
def pkg(obj):
return np # use numpy by default
@pkg.register(ma.MaskedArray)
def _(x):
return ma
def foo(x):
return pkg(x).apply_along_axis(bar, -1, x)
这是 generic function in Python 的另一个例子.
关于python - 编写适用于 ndarray 和 MaskedArray 的通用数值函数的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771788/