1. ホーム
  2. python

[解決済み] help(foo)のように、Pythonのメソッドシグネチャにあるフォワードスラッシュ「/」の意味を教えてください。重複] [重複] [重複] [重複

2022-02-02 03:32:34

質問

によってインタラクティブに返されるシグネチャでは help(foo) の意味は何ですか? / ?

In [37]: help(object.__eq__)

Help on wrapper_descriptor:

__eq__(self, value, /)
    Return self==value.

In [55]: help(object.__init__)

Help on wrapper_descriptor:

__init__(self, /, *args, **kwargs)
    Initialize self.  See help(type(self)) for accurate signature.

キーワードのみの引数と関係があるかと思いましたが、そうではありません。 キーワードのみの引数で自作関数を作成すると、位置指定引数とキーワードのみの引数が * (予想通り)ではなく / . は何を意味するのでしょうか? / の意味は?

どのように解決するのですか?

説明の通り こちら は、その / を引数として指定すると、位置だけの引数の終わりを示します ( ここで ) 、すなわち、キーワードパラメータとして使用できない引数です。の場合 __eq__(self, value, /) の場合、スラッシュが最後にあるため、すべての引数は位置指定のみであることを意味します。 __init__ は self のみ、つまり nothing が positional only となる。

編集する。 これは、以前は組み込み関数にのみ使用されていましたが Python 3.8以降 を使えば、自分自身の関数でこれを使うことができます。の自然な仲間です。 /* で、キーワードだけの引数の先頭をマークすることができます。 の両方を使用した例

# a, b are positional-only
# c, d are positional or keyword
# e, f are keyword-only
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

# valid call
f(10, 20, 30, d=40, e=50, f=60)

# invalid calls:
f(10, b=20, c=30, d=40, e=50, f=60)   # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60)           # e must be a keyword argument