Pythonの関数には、位置引数、キーワード引数、デフォルト引数、そして可変長引数の4つの種類があります。
- 位置引数は、関数を呼び出すときに引数の順番によって値が決まるものです。
- キーワード引数は、関数を呼び出すときに引数の名前を指定して値を渡すものです。
- デフォルト引数は、関数を定義するときに引数に初期値を設定するものです。関数を呼び出すときに引数を省略した場合、デフォルト値が使われます。
- 可変長引数は、関数を呼び出すときに任意の数の引数を渡すことができるものです。*argsと**kwargsという2つの方法があります。
サンプルコード:
# 位置引数
def add(a, b):
return a + b
print(add(3, 5)) # 8
print(add(5, 3)) # 8
# キーワード引数
def greet(name, message):
print(f"Hello, {name}. {message}")
greet(name="Alice", message="Nice to meet you.") # Hello, Alice. Nice to meet you.
greet(message="How are you?", name="Bob") # Hello, Bob. How are you?
# デフォルト引数
def power(x, n=2):
return x ** n
print(power(2)) # 4
print(power(2, 3)) # 8
# 可変長引数
def average(*args):
return sum(args) / len(args)
print(average(1, 2, 3)) # 2.0
print(average(4, 5)) # 4.5
def introduce(**kwargs):
for key, value in kwargs.items():
print(f"{key} is {value}.")
introduce(name="Charlie", age=20, hobby="reading") # name is Charlie. age is 20. hobby is reading.
可変長引数:
*argsと**kwargsは、可変長引数を受け取る方法として使われます。
- *argsは、任意の数の位置引数を受け取ることができます。引数はタプル型として関数内で扱われます。
- **kwargsは、任意の数のキーワード引数を受け取ることができます。引数は辞書型として関数内で扱われます。
- *argsとkwargsの名前は変更できますが、*との数は同じでなければなりません。
サンプルコード:
# 渡された引数をそのまま出力するだけの関数
def print_args(*args, **kwargs):
print(f"args: {args}")
print(f"kwargs: {kwargs}")
# この関数に様々な引数を渡してみる
print_args(1, 2, 3) # 位置引数のみ
# args: (1, 2, 3)
# kwargs: {}
print_args(a=1, b=2, c=3) # キーワード引数のみ
# args: ()
# kwargs: {'a': 1, 'b': 2, 'c': 3}
print_args(1, 2, a=3, b=4) # 位置引数とキーワード引数の混合
# args: (1, 2)
# kwargs: {'a': 3, 'b': 4}