オプションの引数を持つ関数を定義するにはどうすればいいですか? 質問する

オプションの引数を持つ関数を定義するにはどうすればいいですか? 質問する

複数の引数を取る Python 関数があります。一部のシナリオでは、これらの引数の一部を省略できます。

def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
    #code

引数dh、それぞれ意味が異なる文字列です。任意の組み合わせで渡すオプション パラメータを選択できることが重要です。たとえば、(a, b, C, d, e)、 、(a, b, C, g, h)(a, b, C, d, e, f、またはこれらすべて (これらは私の選択です) などです。

関数をオーバーロードできれば素晴らしいのですが、Python はオーバーロードをサポートしていないと読みました。リストに必要な int 引数のいくつかを挿入しようとしましたが、引数の不一致エラーが発生しました。

現在、最初のいくつかの欠落した引数の代わりにプレースホルダーとして空の文字列を送信しています。実際の値だけを使用して関数を呼び出せるようにしたいと思います。

これを実行する方法はありますか? 引数リストの代わりにリストを渡すことはできますか?

現在、ctypes を使用したプロトタイプは次のようになります。

_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]

ベストアンサー1

パラメータを使用するだけで*args、 の後に必要な数の引数を渡すことができます。 map ->a,b,cに何らかのロジックを追加する必要がありますが、これはオーバーロードの「方法」です。argsc,d,e,f

def myfunc(a,b, *args, **kwargs):
   for ar in args:
      print ar
myfunc(a,b,c,d,e,f)

そして、次の値を出力します。c,d,e,f


同様にkwargs、引数を使用してパラメータに名前を付けることもできます。

def myfunc(a,b, *args, **kwargs):
      c = kwargs.get('c', None)
      d = kwargs.get('d', None)
      #etc
myfunc(a,b, c='nick', d='dog', ...)

そして、その後kwargsにキー値が設定されるすべてのパラメータの辞書を作成します。a,b

おすすめ記事