修飾関数はNDData対象を受け入れる

♪the astropy.nddata モジュールは装飾器を含んでいます support_nddata() これにより開発者やユーザが容易に作成することができます NDData オブジェクトおよび単独のパラメータ.

以下の機能を考慮してください。

def test(data, wcs=None, unit=None, n_iterations=3):
    ...

この関数を test(nd) どこだ? nd ある種の NDData 例を挙げましょう以下の命令を用いてこの関数を修飾することができる support_nddata() **

from astropy.nddata import support_nddata

@support_nddata
def test(data, wcs=None, unit=None, n_iterations=3):
    ...

これはユーザが呼び出したときに test(nd) 使用する:この関数を自動呼び出しする.

test(nd.data, wcs=nd.wcs, unit=nd.unit)

修飾器は関数の署名を見て、何かパラメータがあるかどうかをチェックするのも NDData オブジェクトは,それらを単一のパラメータとして渡す.修飾されていないように,単独のパラメータを用いてこの関数を呼び出すことも可能である.

以下のようなことが発生した場合は,警告を発する. NDData 属性ですが関数はそれを受け入れません-例えば wcs 設定されているが、この関数はWCSオブジェクトをサポートしていない。一方,関数中のパラメータが存在しなければ NDData オブジェクトまたは設定されていない場合は、デフォルト値を保持します。

If the function call succeeds, then the decorator returns the values from the function unmodified by default. However, in some cases we may want to return separate data, wcs, etc. if these were passed in separately, and a new NDData instance otherwise. To do this, you can specify repack=True in the decorator and provide a list of the names of the output arguments from the function:

@support_nddata(repack=True, returns=['data', 'wcs'])
def test(data, wcs=None, unit=None, n_iterations=3):
    ...

このようにして,この関数は以下の場合に単独の値を返す. test 個々のパラメータ呼び出しを用いて,入力がYESの場合は,入力と同じクラスタイプのオブジェクトを呼び出す. NDData あるいはサブクラスインスタンス.

最後に、装飾者に入力を特定のものに制限させることができます NDData サブクラス(およびこれらのサブクラスのサブクラス)を用いる accepts オプション::

@support_nddata(accepts=CCDImage)
def test(data, wcs=None, unit=None, n_iterations=3):
    ...