*args, **kwargsは可変長引数。異なる数の引数を関数に渡せる
*args, **kwargsは引数(いくつになるか事前にはわからない)を関数に渡すために使用される。
いくつになるか事前にはわからないので可変長引数と呼ばれる
通常、関数には引数が定められている。関数を呼び出したときに渡す引数の過不足があるとエラーが発生することがあるが、可変長引数を用いることで、好きな数の引数を関数に渡すことができる。
*argsは好きな数の引数を関数に渡すために使用する。
※好きな数の引数は可変長の位置引数と呼ばれ、渡される順序に依存する。
**kwargsは好きな数の引数を、キーとバリューのペア(辞書)として関数に渡すために使用する。
※キー・バリューのペアとしての好きな数の引数は、可変長のキーワード引数と呼ばれる。
可変長とは、引数の数が毎回異なっていても良いということ。
通常、関数は引数が決まっており、関数に渡す引数に過不足があるとエラーが発生する。
しかし、可変長引数を使うことで毎回異なる数の引数を渡すことができる。
役に立つ場面の一例として、ある関数では引数に対して共通の処理を行いたいが、その引数は別の処理によって生み出されるもので、
いくつになるかがわからないといった場合が挙げられる。
*argsに渡す位置引数とは関数に順番に渡す引数のこと。
単純に好きな数の引数を渡せと捉えて良い。
**kwargsに渡すキーワード引数とは、関数にキーと値のペアで渡される引数のこと。
辞書を引数として渡すことができると考えるとイメージしやすい。
可変長引数 *args, **kwargsの使い方
*argsで関数に可変長の位置引数を渡す
使用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
def test1(*args): for i in args: print(i) #[1]好きな数の引数を渡す test1(1,2,3) #1 #2 #3 #[2]任意の数の文字列の引数を渡す test1("Hello", "World") #Hello #World #[3]任意の数の数値と文字列の引数を渡す。 test1("Hello", 1, 2, 3, "World") #Hello #1 #2 #3 #World #[4]リストを渡すこともできる。 test1([1,2,3,4,5]) #[1,2,3,4,5] #[5]タプルを渡すこともできる test1(("a","b","c")) #('a', 'b', 'c') #[6]辞書を渡すこともできる test1({1:"a", 2:"b", 3:"c"}) #{1:"a", 2:"b", 3:"c"} #[7]リスト、タプル、辞書を一緒に渡すこともできる。 test1([1,2,3], (1,2,3), {1:"a", 2:"b", 3:"c"}) #[1, 2, 3] #(1, 2, 3) #{1: 'a', 2: 'b', 3: 'c'} |
*argsは通常の引数の後につける
可変長引数の*argsは通常の引数に後につける。
可変長引数の後に通常の引数をつけるとエラーが発生する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
def test2(*args, greeting): for i in args: print(i) print(greeting) #[1]*argsとgreetingの境目がわからないのでエラーが発生 test2(1,2,3,"Hello World") #TypeError: test2() missing 1 required keyword-only argument: 'greeting' #[2]引数名を指定することで渡すことはできる test2(1,2,3,greeting="Hello World") #1 #2 #3 #Hello World |
1 2 3 4 5 6 7 8 9 10 |
def test3(greeting, *args): print(greeting) for i in args: print(i) test3("Hello World",1,2,3) #Hello World #1 #2 #3 |
**kwargsに可変長のキー・バリューの引数を渡す
使用例
1 2 3 4 5 6 7 8 |
def test3(**kwargs): for key, value in kwargs.items(): print(key, value) test2(key1="value1",key2="value2") #key1 value1 #key2 value2 |
key1、key2がキー、”value1″、”value2″が値として関数に渡されている。
辞書を作る時は{“key1″:”value1”, “key2″:”value2”}とするが、可変長引数の場合はキーには文字列としての引用符(“”)はつけない。
*args,**kwargsを組み合わせて使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
def test4(*args, **kwargs): for i in args: print(i) for key, value in kwargs.items(): print(key, value) test4(1,"2",[3,"4"],("5",6),{"greeting":"Hello World"}, key1=1,key2="2", key3=[3], key4=(4), key5={"greeting": "Hello World"}) #*argsに渡される位置引数 #1 #2 #[3, '4'] #('5', 6) #{'greeting': 'Hello World'} #ここから**kwargsに渡されるキーワード引数 #key1 1 #key2 2 #key3 [3] #key4 4 #key5 {'greeting': 'Hello World'} |
*args,**kwargsは組み合わせて使うことができる。
*argsは**argsの前に使用する決まりがある。
コメント