ライブラリの新しいバージョンでの作業いくつかの関数のデフォルト引数の1つを変更します。だから私は、明示的に指定されたパラメータなしで関数を呼び出すときに発生する一時的な警告を追加したいと思います(関数はデフォルトで呼び出されます)。関数の特定の引数を変更するデコレータ
これは、簡単に警告機能を追加し、基本機能のそれぞれの内側にそれを呼び出すことによってだけ行うことができます。
def warning(formatting):
if formatting is None:
sys.stderr.write("WARNING: The default format has changed to new_format")
return 'new_format'
return formatting
def my_function(arg1, arg2, formatting=None):
formatting = warning(formatting)
... # the following function code
(コードの可読性のために)デコレータを使用してそれを実行する方が便利だろうが。 formatting
は、キーワードパラメータとして指定されている場合、私はformatting
パラメータなしmy_function
を呼び出すとすると、期待どおりに動作し
def check_default_format(fun):
def warning(*a, **kw):
if 'formatting' not in kw.keys() or kw['formatting'] is None:
kw['formatting'] = 'new_format'
sys.stderr.write("WARNING: The default format has changed to new_format")
return fun(*a, **kw)
return warning
@check_default_format
def my_function(arg1, arg2, formatting=None):
... # the function code
:だから私はこのような何かを実装しました。 しかし、位置パラメータだけでmy_function
を呼び出すことができる可能性をどのように含めるには? my_function('arg1', 'arg2', 'some_format')
を呼び出すと、formatting
パラメータの重複によってTypeError
が生成されます。
注:異なる機能を装飾する必要があるため、formatting
は常に第3パラメータであるとは思えません。下位互換性を保つために、パラメータの順序を変更することもできません。 python 3では
formatting' 'のデフォルト値は常に' NONE'でしょうか? –
有効なデフォルトの書式設定は(常に) 'new_format'です。ユーザが 'new_format'を暗黙的に指定したかどうか、または関数がデフォルトで呼び出されたかどうかを判断するために、関数宣言で(常に) 'None'に設定されています。 – Dado