是否有更美丽的方式:
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
),但在不同的命名空间下
答案 0 :(得分:0)
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的另一个例子。