スラッシュ(/)は、それより前のすべての引数が位置のみの引数であることを示します。位置のみの引数機能は、PEP 570が受け入れられた後にPython 3.8で追加されました。最初、この表記はPEP 457で定義されました-位置のみのパラメーターの表記の表記
前方スラッシュ(/)より前の関数定義のパラメーターは位置のみであり、スラッシュ(/)が後に続くパラメーターは、構文に従って任意の種類にすることができます。引数が、関数の呼び出し時の位置のみに基づいて、位置のみのパラメーターにマップされる場合。keyword(name)による位置のみのパラメーターの受け渡しは無効です。
次の例を見てみましょう
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
ここで、上記の関数定義のパラメーターaおよびbは位置のみですが、xまたはyは位置またはキーワードのいずれかです。
以下の関数呼び出しが有効です
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
ただし、次の関数呼び出しは無効であり、a、bは位置引数として渡されず、キーワードとして渡されるため、例外TypeErrorが発生します。
foo(a=1.45, b=3.14, x=1, y=4)
TypeError:foo()は、キーワード引数として渡される位置のみの引数を受け取りました: 'a、b'
Pythonの多くの組み込み関数は、位置指定のみの引数を受け入れますが、キーワードで引数を渡しても意味がありません。たとえば、組み込み関数lenは、1つの位置(のみ)引数のみを受け入れます。len(obj = "hello world")としてlenを呼び出すと、読みやすさが低下します。help(len)を確認してください。
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
位置のみのパラメーターは、基礎となるc /ライブラリー関数の保守を容易にします。APIを使用するクライアントコードを壊すリスクなしに、位置のみのパラメーターのパラメーター名を将来変更できるようにします。
最後に重要なことですが、位置のみのパラメーターを使用すると、可変長のキーワード引数でその名前を使用できます。次の例を確認してください
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
位置のみのパラメーターの方が適切です。Python の関数引数のタイプ:位置のみのパラメーターで説明されています
位置のみのパラメータ構文が正式にpython3.8に追加されました。新機能python3.8のチェックアウト-位置のみの引数
PEP関連:PEP 570-Python位置のみのパラメーター
/
トークンを選択すると、「の逆演算*
」が示されているため、Pythonは少し狂っています。それは一種の共感覚です。