ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Python - 可変長引数

初めに

 Pythonの引数の個数を任意個にできる可変長引数の定義の仕方をまとめます。

可変長引数

可変長引数とは

 関数の引数の個数が任意の個数となっている引数のことです。

可変長引数の種類

 可変長引数には、次の2つがあります。

種類 説明
位置引数 任意の個数の引数をタプルとして扱う
*argsを使って受け取る
キーワード引数 任意の個数の引数を辞書の形式で扱う
**kwargsを使って受け取る

位置引数の使い方

 位置引数の可変長引数は、引数に*argsを使います。呼び出すときは、,で区切って引数を指定します。

def func(*args):
    print(*args)

func(1, 2, 3)   # 出力: 1 2 3
func(1, 2, 3, 4)    # 出力: 1 2 3 4
キーワード引数の使い方

 キーワード引数の可変長引数は、引数に**kwargsを使います。呼び出すときは、キーワード = 値の形で記述します。

def func(**kwargs):
  print(kwargs)

func(name="佐藤", id=1, point=80)   # 出力 : {'name': '佐藤', 'id': 1, 'point': 80}
func(name="山田", id=2, point=90)   # 出力 : {'name': '山田', 'id': 2, 'point': 90}
普通の引数と位置引数を組み合わせる

 普通の引数と位置引数を組み合わせた関数を定義することができます。

 普通の引数は前に記述することも後に記述することもできます。

(普通の引数を前に記述する場合)

# 普通の引数を前に記述する場合
def func(x, *args):
  result = ", ".join(args)
  print(str(x) + " : " + result)

# 普通の引数にキーワードは書かない
func(1, "あ", "い", "う")   # 出力 : 1 : あ, い, う

(普通の引数を後に記述する場合)

# 普通の引数を後に記述する場合
def func(*args, x):
  result = ", ".join(args)
  print(str(x) + " : " + result)

# 普通の引数にキーワードを書く
func("か", "き", "く", x=1)   # 出力 : 1 : か, き, く
普通の引数とキーワード引数を組み合わせる

 普通の引数とキーワード引数を組み合わせた関数を定義することができます。

 位置引数の場合との違いは、必ず普通の引数を前にする必要がある点です。

# 普通の引数はキーワードに引数の前に記述する
def func(x, **kwargs):
  print(f'{x}: {kwargs}')

# 普通の引数にはキーワードを書かない
func(1, name="佐藤", point=100)   # 出力 : 1: {'name': '佐藤', 'point': 100}
普通の引数、位置引数、キーワード引数をすべて組み合わせる

 普通の引数、位置引数、キーワード引数をすべて組み合わせた関数を定義することができます。

 注意点として、位置引数とキーワード引数を同時に使用する場合は、位置引数を先に記述する必要があります。

(例1)

def func(x, *args ,**kwargs):
  print(f'{x}: {args} "," {kwargs}')

# 普通の引数にはキーワードを書かない
func(1, 2, 3, 4, name="佐藤", point=100)   # 出力 : 1: (2, 3, 4) "," {'name': '佐藤', 'point': 100}

(例2)

def func(*args, x ,**kwargs):
  print(f'{x}: {args} "," {kwargs}')

# 普通の引数にはキーワードを書かない
func(1, 2, 3, x=4, name="佐藤", point=100)   # 出力 : 4: (1, 2, 3) "," {'name': '佐藤', 'point': 100}
注意点

 同じ種類の可変長引数は関数定義の中で1個だけしか使用できません。つまり、位置引数は1関数1個、キーワード引数も1関数1個になります。