Python で Kwargs を別の関数に渡す
Python は、プログラム内の関数に渡すことができる 2 種類の引数をリストしています。 非キーワード引数 ( **args
) とキーワード引数 (**kwargs
) 。
通常、Python 関数は正しい数の引数で呼び出す必要があります。 関数が 2つの引数を想定している場合は、2つだけを渡す必要があります。
この記事では、キーワード引数の使用方法と、キーワード引数を別の関数に渡す方法について説明します。
Python のキーワード引数
通常、引数は情報を関数に渡します。 キーワード引数は、関数に引数を渡すために使用できるメソッドの 1つです。
特にキーワード引数を使用すると、key = value
構文で引数を送信できます。 次の例を見てみましょう。
def keyword_function(fname, lname, age):
print("first name is " + fname)
keyword_function(fname="Anne", lname="Steaven", age=27)
この例では、keyword_function
という関数を定義しています。 fname
、lname
、age
という名前の 3つの引数を渡します。
したがって、これらの引数はキーワード引数として送信されます。関数がプログラムで呼び出されると、各引数にキーと値のペアが必要になるためです。
出力:
上記の出力では、fname
引数を渡すステートメントを出力しています。
Python で **kwargs
を使用して関数を呼び出す
主にキーワード引数は、いくつかの引数が不明な場合に使用できます。 その場合は、関数定義のパラメータ名の前に 2つのアスタリスク (**
) を追加します。
関数に **kwargs
パラメータがある場合、可変数のキーワード引数を辞書として受け入れます。
次の例を考えてみてください。
def animals(**kwargs):
print(kwargs)
animals(name1="Rabbit", name2="Dog", name3="Monkey")
上記のコードには animals
という関数があります。 **kwargs
というパラメーターがあり、これはキーワード引数として 3つの引数を持つ関数呼び出しです。
出力:
結果は、値とキーの 2つのペアを持つ辞書として表示されます。 kwargs
引数は規約です。
したがって、パラメーター名として、意味のある名前を使用できます。 同様に、これは **kwargs
パラメーターを使用して関数を呼び出す方法です。
kwargs
を Python で別の関数に渡す
コード:
def info(**kwargs):
x = dict(name="shen", age=27, degree="SE")
pass_func(**x)
def pass_func(**kwargs):
for i in kwargs:
print(i, kwargs[i])
info()
上記のコードを使用して、name
、age
、degree
など、人物に関する情報を出力します。 このプログラムは、dict
メソッドを宣言する変数 x
を含む別の関数に kwargs
を渡します。
パラメータなしで定義された関数 info
の例。 関数 info
は、3つのキーと値のペアを定義する変数 x
を宣言しました。通常、キーと値のペアは Python の辞書型で定義されます。
したがって、dict
メソッドはキーと値のペアを指定します。 kwargs
unpack 引数は辞書型として宣言されているため、この例では dict
メソッドを使用できます。
次に、kwargs
引数を渡す pass_func
という別の関数があります。 この関数には、kwargs
引数を出力する for
ループが含まれています。その後、kwargs
関数を info
関数に渡して x
を出力できます。
したがって、x
変数に kwargs
引数を指定して pass_func
を呼び出します。 最後に、pass_func
関数で info
関数を呼び出します。
出力:
まとめ
この記事全体を通して、kwargs
を別の関数に渡す方法に焦点を当てました。 kwargs
引数は、引数ごとに定義されたパラメーターなしで複数の変数を取得できます。
kwargs
引数を関数に渡すときは、パラメーター名 **kwargs
で二重アスタリスクを使用する必要があります。 kwargs
を別の関数に渡す場合、最初に 2つのアスタリスクを使用してパラメーターを作成し、その関数を目的として別の関数に渡すことができます。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.