Pythonの引数の使い方

引数は関数を使いこなすためには必要不可欠な機能です。今回は引数についての説明や使用する際の注意点、デフォルト引数、キーワード指定引数、可変長引数などの便利な使い方を紹介します。

引数とは

引数とは、関数を処理するときに追加の情報を与えるものです。例を示しながら引数について説明します。以下のプログラムは2つの値を足し算をして、その結果を表示するような関数の例です。

def add(x, y):
    print(x + y)

引数とは add の後ろにある x と y と名付けられた変数のことを示します。関数を呼び出すときにこれらの引数に値を指定することで、変数に指定した値が代入されます。下の例では 2 と 3 という値と、 3 と 7 という値を関数の引数として与えています。

def add(x, y):
    print(x + y)

add(2, 3) # 5
add(3, 7) # 10

2, 3 を与えると add の x, y の引数に値が代入され、 print(2 + 3) という式が実行され、 5 が出力されます。3 と 7 を与えると print(3 + 7) 実行され、10 が出力されます。引数を使えばひとつの関数でも異なった動作をさせることができ、様々なパターンで関数を利用できるようになります。

ちなみに x , y のようなものを仮引数、呼び出すときに与えるものを実引数と呼びます。

引数を使用する上での注意点

例のように add は2つの仮引数が定義されており、呼び出すときに与える実引数の個数が異なってたり、呼び出す型が対応してなかったりする場合は、エラーになってしまいます。

様々な型の引数

引数には整数型だけでなく、文字列やリストや辞書などのオブジェクトも渡すことができます。

>>> len("apple")
5
>>> sum([1, 2, 3, 4, 5])
15
>>> max(1, 7, -10)
7
>>> max([1, 7, -5, 3])
7

len は与えた文字列の長さを返す関数です。また、 sum は与えたリストの要素の合計を返す関数です。max は与えた引数の数値の中から最大値を返す関数です。max のように異なった引数の個数や型を与えられる関数も存在します。

Python の型はコンパイラによって自動的に型が決められます。関数を使うときはその関数がどのような型に対応しているのかを理解し、注意して使用する必要があります。

特殊な引数の定義方法

Python には様々な引数を定義する方法があります。ここではその定義方法を紹介します。

デフォルト値をもつ引数

関数の引数にデフォルト値(初期値)をもつように定義することができます。

def add(x, y = 10):
    print(x + y)

add(2, 3) # 5
add(2)    # 12

上の例では引数 y は 10 というデフォルト値をもっています。 add(2, 3) のように関数を呼び出した場合は 2 + 3 が実行されるのに対して、add(2) のようにデフォルト値があるような引数を呼び出すときに与えない場合は、デフォルト値が引数に代入され、 2 + 10 が実行されます。

キーワード指定の引数

Python には関数に対応する引数を指定して与える、キーワード指定ができます。キーワードはイコール = を使用して指定します。

def fullname(lastname, firstname):
    print(firstname + " " + lastname)

fullname(lastname="Smith", firstname="John") # John Smith
fullname(firstname="John", lastname="Smith") # John Smith

上の例のように与える仮引数にキーワードを指定することによって、対応する引数に値を渡すことができます。例では与えている引数の順序が異なっているのにもかかわらず、2つの関数呼び出しの結果は同じになっています。

可変長引数

Python の関数では引数の個数をいくつでも受け取ることができる関数を定義することができます。可変長の引数を定義するためには可変長引数の前にアスタリスク * を付けます

def hoge(x, *args):
    print(x, args)

hoge("A", 1, 2, [1, 2, 3]) # ('A', (1, 2, [1, 2, 3]))
hoge("A")                  # ('A', ())

可変長で与えられた引数はタプルとして扱われます。上の例のように 2 番目以降の引数は1つのタプルとして扱われていることが確認できます。また可変長引数に引数を渡さなかった場合は空のタプルとして扱われます。この * を1つ付けただけの可変長引数はキーワード指定した引数は受け取れません。

キーワード指定された未定義の引数

アスタリスクを2個 ** 付けることによって、キーワード指定された未定義の引数を受け取ることができます。キーワード指定された引数は、キーワードをキー値としたディクショナリとして扱われます。

def hoge(x, **args):
    print(x, args)

hoge("A", y="B", z="C") # ('A', {'y': 'B', 'z': 'C'})

引数には定義していなかった y と z がディクショナリの要素として代入されているのが確認できます。

まとめ

引数は関数を便利に使うためには必要不可欠なものです。引数の渡し方を工夫することでより複雑な処理に対応した関数を作成することができます。Python は様々な引数の渡し方ができるので、是非色々なパターンを試してみてください。