![Pythonの*argsと**kwargsを理解する](https://vynsen.net/wp-content/uploads/2022/06/d8dc4a429fc158b16289148e894a8ec2.png)
Python #9
引数の数を自由に増やせるパラメーター *args
今まで引数を設定するパラメーターはdefを定義するときに指定をしていました。
以下のようにaddの関数に事前にn1とn2というパラメーターを設定して、呼び出すときにそれぞれの引数を設定していました。
def add(n1, n2):
return n1 + n2
print(add(3, 5))
しかし、引数を沢山追加したい時どうすればいいでしょうか?
そんな時に使えるのが *args です。
![](https://vynsen.net/wp-content/uploads/2022/06/b6355c7c038a632663103b69d9f99965-9-1024x576.png)
例えば、引数全ての合計を出す関数を定義するときには以下のようにすることが出来ます。
def add(*args):
return sum(args)
add(3, 5)
add(3, 5) の引数はいくつでも増やすことができます。ちなみに、*argsは*がついていれば他のパラメーター名にすることが可能です。 *numsでも、*numbersでも使えます。
def add(*numbers):
return sum(numbers)
print(add(3, 5, 20, 15))
また、*argsのデータ型はタプル型となります。
![](https://vynsen.net/wp-content/uploads/2022/06/2-6-1024x576.png)
パラーメーター名を指定する**kwargsとgetの組み合わせ
*argsは引数をいくつでも設定することができましたが、パラメーター名を指定することができません。
パラメーター名を指定するには「**kwargs」を使用します。
![](https://vynsen.net/wp-content/uploads/2022/06/1-8-1024x576.png)
**kwargsも*args同様に**がついていればkwargsにこだわらなくもいいです。kwを書いても機能します。
また、*argsがタプル型なのに対して、**kwargsは辞書型のデータになります。
![](https://vynsen.net/wp-content/uploads/2022/06/2-7-1024x576.png)
class Hospital:
def __init__(self, **kwargs):
self.hos = kwargs["hos"]
self.dep = kwargs["dep"]
my_hospital = Hospital(hos="東京**医院", dep="外科")
print(my_hospital.hos)
上記のコードのように記述することができますが1つ問題があります。それは引数を宣言しないとエラーがおきることです。
![](https://vynsen.net/wp-content/uploads/2022/06/2-8-1024x576.png)
すべてのパラメーターに引数を宣言するのは大変なので、引数を宣言しない場合はNoneをかえしてくれるget()を利用します。
![](https://vynsen.net/wp-content/uploads/2022/06/1-9-1024x576.png)
Python #11
ぜひ参考にしてください!また!