1. ホーム
  2. python

[解決済み] 関数にオプションのパラメータを渡す方法はありますか?

2022-06-08 04:11:35

質問

Pythonで、関数を呼び出す際にオプションのパラメータを渡し、関数定義の中で "オプションのパラメータが渡された場合のみ" に基づくいくつかのコードを持つ方法はありますか?

どのように解決するのですか?

この Python 2 のドキュメントです。 7.6. 関数定義 は、呼び出し元がオプションのパラメータを提供したかどうかを検出するためのいくつかの方法を提供します。

まず、特別な正式なパラメータ構文である * . 関数定義の形式パラメータの前に1つの * がある場合、Pythonはそのパラメータに、先行する形式パラメータにマッチしない任意の位置パラメータを(タプルとして)代入します。もし関数定義が、形式パラメータの前に ** がある場合、Pythonはそのパラメータに、(dictとして)先行する形式パラメータにマッチしないキーワードパラメータを代入します。関数の実装は、これらのパラメータの内容をチェックし、必要な種類の "オプションのパラメータ" があるかどうかを確認することができます。

例えば、次のような関数があります。 opt_fun という関数があり、これは二つの位置パラメータをとります。 x1x2 という名前の別のキーワードパラメータを探し、quot;optional" とします。

>>> def opt_fun(x1, x2, *positional_parameters, **keyword_parameters):
...     if ('optional' in keyword_parameters):
...         print 'optional parameter found, it is ', keyword_parameters['optional']
...     else:
...         print 'no optional parameter, sorry'
... 
>>> opt_fun(1, 2)
no optional parameter, sorry
>>> opt_fun(1,2, optional="yes")
optional parameter found, it is  yes
>>> opt_fun(1,2, another="yes")
no optional parameter, sorry

次に、デフォルトのパラメータ値として、次のような何らかの値を与えることができます。 None のような、呼び出し元が決して使用しないような値を指定することができます。パラメータがこのデフォルト値を持つ場合、呼び出し元がパラメータを指定しなかったことがわかります。パラメータがデフォルト値でない場合、呼び出し元が指定したことが分かります。