Python 関数の引数
Python 関数の引数
Python では、可変数の引数を取る関数を定義できます。この記事では、デフォルト、キーワード、および任意の引数を使用してそのような関数を定義する方法を学習します。
ビデオ:Python 関数の引数:位置、キーワード、およびデフォルト
引数
ユーザー定義関数のトピックでは、関数の定義と呼び出しについて学びました。そうしないと、関数呼び出しでエラーが発生します。以下に例を示します。
def greet(name, msg):
"""This function greets to
the person with the provided message"""
print("Hello", name + ', ' + msg)
greet("Monica", "Good morning!")
出力
Hello Monica, Good morning!
ここで、関数 greet()
には 2 つのパラメーターがあります。
この関数を 2 つの引数で呼び出したので、問題なく実行され、エラーは発生しません。
異なる数の引数で呼び出すと、インタープリターはエラー メッセージを表示します。以下は、引数を 1 つ指定した場合と引数を指定しない場合のこの関数の呼び出しと、それぞれのエラー メッセージです。
>>> greet("Monica") # only one argument TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet() # no arguments TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
変数関数の引数
これまで、関数の引数の数は決まっていました。 Python では、可変数の引数を取ることができる関数を定義する方法が他にもあります。
このタイプの 3 つの異なる形式を以下に説明します。
Python のデフォルト引数
Python では、関数の引数にデフォルト値を設定できます。
代入演算子 (=) を使用して、引数にデフォルト値を指定できます。以下に例を示します。
def greet(name, msg="Good morning!"):
"""
This function greets to
the person with the
provided message.
If the message is not provided,
it defaults to "Good
morning!"
"""
print("Hello", name + ', ' + msg)
greet("Kate")
greet("Bruce", "How do you do?")
出力
Hello Kate, Good morning! Hello Bruce, How do you do?
この関数では、パラメーター name
にはデフォルト値がなく、通話中に必要 (必須) です。
一方、パラメータ msg
デフォルト値は "Good morning!"
です .したがって、通話中はオプションです。値を指定すると、デフォルト値が上書きされます。
関数内の任意の数の引数にデフォルト値を設定できます。しかし、デフォルトの引数を取得すると、その右側のすべての引数にもデフォルト値が必要になります。
つまり、デフォルト以外の引数はデフォルトの引数に続くことはできません。たとえば、上記の関数ヘッダーを次のように定義した場合:
def greet(msg = "Good morning!", name):
次のようなエラーが発生します:
SyntaxError: non-default argument follows default argument
Python キーワード引数
いくつかの値で関数を呼び出すと、これらの値はその位置に従って引数に割り当てられます。
たとえば、上記の関数 greet()
では 、 greet("Bruce", "How do you do?")
として呼び出したとき 、値 "Bruce"
引数 name に割り当てられます 同様に "How do you do?"
メッセージへ .
Python では、キーワード引数を使用して関数を呼び出すことができます。このように関数を呼び出すと、引数の順序 (位置) を変更できます。上記の関数への次の呼び出しはすべて有効で、同じ結果を生成します。
# 2 keyword arguments
greet(name = "Bruce",msg = "How do you do?")
# 2 keyword arguments (out of order)
greet(msg = "How do you do?",name = "Bruce")
1 positional, 1 keyword argument
greet("Bruce", msg = "How do you do?")
ご覧のとおり、関数呼び出し中に位置引数とキーワード引数を混在させることができます。ただし、キーワード引数は位置引数の後に続く必要があることに注意してください。
キーワード引数の後に位置引数があると、エラーが発生します。たとえば、次のような関数呼び出し:
greet(name="Bruce","How do you do?")
エラーになります:
SyntaxError: non-keyword arg after keyword arg
Python の任意の引数
関数に渡される引数の数が事前にわからない場合があります。 Python では、任意の数の引数を指定して関数呼び出しを行うことで、この種の状況を処理できます。
関数定義では、パラメーター名の前にアスタリスク (*) を使用して、この種の引数を示します。以下に例を示します。
def greet(*names):
"""This function greets all
the person in the names tuple."""
# names is a tuple with arguments
for name in names:
print("Hello", name)
greet("Monica", "Luke", "Steve", "John")
出力
Hello Monica Hello Luke Hello Steve Hello John
ここでは、複数の引数を指定して関数を呼び出しました。これらの引数は、関数に渡される前にタプルにラップされます。関数内では、 for
を使用します ループしてすべての引数を取得します。
Python