基づいて、この
位置引数は、等号(=)とデフォルト値が後に続かない名前です。
キーワード引数の後には、等号とデフォルト値を与える式が続きます。
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
質問>とは両方とも位置引数であるwidthと思いheightます。では、なぜキーワード引数構文で呼び出すことができるのでしょうか。
基づいて、この
位置引数は、等号(=)とデフォルト値が後に続かない名前です。
キーワード引数の後には、等号とデフォルト値を与える式が続きます。
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
質問>とは両方とも位置引数であるwidthと思いheightます。では、なぜキーワード引数構文で呼び出すことができるのでしょうか。
回答:
引用するテキストは関数の定義用であり、関数の呼び出しとは関係ありません。その関数の呼び出しでは、「名前付き引数」機能を使用しています。あなたが提供するそのリンクはあまり質の良いものではありません、著者は2つの異なるものの間で混乱しているようです。
Pythonリファレンスは、関数の呼び出しに関してのみ、位置引数とキーワード引数を参照します(セクションを参照5.3.4 Calls)。
セクション7.6 Function definitionsで関数の定義について話すとき、それは「デフォルトのパラメータ値」というまったく異なる用語です。
そのコースウェアをまとめた人々はPythonに完全に精通していなかったと思います:-)
例として、次の定義と呼び出しを参照してください。
def fn (a, b, c = 1): # a/b required, c optional.
return a * b + c
print fn (1, 2) # returns 3, positional and default.
print fn (1, 2, 3) # returns 5, positional.
print fn (c = 5, b = 2, a = 2) # returns 9, named.
print fn (b = 2, a = 2) # returns 5, named and default.
print fn (5, c = 2, b = 1) # returns 7, positional and named.
print fn (8, b = 0) # returns 1, positional, named and default.
=定義にあるか呼び出しにあるかに応じて、変更の意味が変わります。
定義では、引数をオプションとしてマークし、デフォルト値を設定します。
呼び出しでは、必要な順序で、どの引数をどの値にするかを指定できます。
Python 3.8では位置引数のみが導入されたため、この投稿は更新が必要です。
位置引数、キーワード引数、必須引数、およびオプションの引数は、しばしば混同されます。位置引数は、必須の引数と同じではありません。およびキーワード引数は、オプションの引数と同じではありません。
位置引数は、関数定義内の位置によって呼び出すことができる引数です。
キーワード引数は、名前で呼び出すことができる引数です。
必須の引数は、関数に渡さなければならない引数です。
オプションの引数は、関数に渡すことができない引数です。Pythonでは、オプションの引数はデフォルト値を持つ引数です。
オプションの位置引数(python 3.8)
def f(a=2, /):
pass
f() # Allowed, argument is optional
f(1) # Allowed, it's a positional argument
f(a=1) # Error, positional only argument
必要な位置引数(python 3.8)
def f(a, /):
pass
f() # Error, argument required
f(1) # Allowed, it's a positional argument
f(a=1) # Error, positional only argument
オプションのキーワード引数
def f(*, a=1):
pass
f() # Allowed
f(1) # Error, keyword only arguments
f(a=1) # Allowed, it's a keyword argument
必要なキーワード引数
def f(*, a)
pass
f() # Error, argument required
f(1) # Error, keyword only arguments
f(a=1) # Allowed, it's a keyword argument
オプションの位置引数とキーワード引数
def f(a=1)
pass
f() # Allowed, argument is optional
f(1) # Allowed, it's a positional argument
f(a=1) # Allowed, it's a keyword argument
# In fact this function is the same as
def f(*, a=1, /):
pass
必要な位置引数とキーワード引数
def f(a):
pass
f() # Error, argument required
f(1) # Allowed, it's a positional argument
f(a=1) # Allowed, it's a keyword argument
# In fact this function is the same as
def f(*, a, /):
pass
結論として、引数はオプションでも必須でもかまいませんが、同時に両方ではありません。位置、キーワード、またはその両方を同時に使用することもできます。
Python 3.8では、位置のみのパラメーターが導入されました。
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument):
pass
f(/,a,*)なく、という意味f(*, a, /)ですか?
キーワード引数は、デフォルト値を持つ単なる定位置引数です。デフォルト値を持たないすべての引数を指定する必要があります。つまり、キーワード引数は、特に指定されていない場合はデフォルト値に設定されるため、「オプション」にすぎません。
位置引数は、値を順番に使用するか、それぞれに名前を付けることによって呼び出すことができます。たとえば、次の3つすべてが同じように機能します。
def rectangleArea(width, height):
return width * height
print(rectangleArea(1, 2))
print(rectangleArea(width=1, height=2))
print(rectangleArea(height=2, width=1))
位置引数:正しい位置順序で関数に渡される引数。以下のプログラムは、関数の位置引数を理解します
#positional arguments example
def combine(str1, str2):
#To join str1 and str2 with str3
str3 = str1 + str2
print(str3)
#call combine() and pass 2 strings
combine("Well", "come") #positional arguments
最初に「come」、次に「well」を渡したとすると、結果はcomewellになります。また、関数を呼び出すと3文字列がエラーになります。
関数のキーワード引数を理解します。
キーワード引数は、名前でパラメーターを識別する引数です。
#keyword arguments example:
def employee(name, Id):
print("Employee Name: ", name)
print("Employee Id : ", Id)
#call employee() and pass 2 arguments
employee(name = "inban", Id = "pay001")
employee(Id = "pay002", name = "karthik") #we can change the order args.
ここでパラメータと引数を定義すると役立つ場合があります。
例えば、
def my_function(parameter_1, parameter_2):
pass
my_function(argument_1, argument_2)
ここで、位置引数と言うときは、引数について話しているので、関数の定義とは何の関係もありません。widthそしてheightあなたの例では、位置パラメータですかのキーワードパラメータ(いわゆるキーワード位置-またはパラメータ)。
値を呼び出す/関数に渡す方法によって、それらが位置引数であるかキーワード引数であるかが決まります。
rectangleArea(1, 2) # positional arguments
rectangleArea(width=1, height=2) # keyword arguments
多くの人々が知っている事は、あなたが使用することにより、位置のみのパラメータを指定することができるということである/パラメータリスト(の例ではここに)。
def func(positional_only1, positional_only2, /, positional_or_keyword): ...
同様に、*文字を使用してキーワードのみのパラメーターを設定することもできます。
def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
最後に、var-positionalとvar-keyword(それぞれ* argsと** kwargs)もあります。つまり、任意の順序の位置引数またはキーワード引数を関数に渡すことができます。