

お世話になっております。

タイトルの件について質問です。

numpy v1.15のリファレンス sin関数の引数の意味についてです。  
<https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.sin.html#numpy.sin>

リファレンスには、

numpy.sin(x, /, out=None, *, where=True, casting='same_kind', order='K',
dtype=None, subok=True[, signature, extobj]) =

と記載されておりますが、

実際に使う場合  
sin(x, *args, **kwargs)

としなければいけません。  
pycharmからnumpyソースコードのumath.pyを確認してみましたが、  
def sin(x, *args, **kwargs):  
で定義されており、

numpy.sin(x, /, out=None, *, where=True, casting='same_kind', order='K',
dtype=None, subok=True[, signature, extobj]) =  
の部分はその下の行でコメントアウトされておりました。

なぜ、マニュアルには  
numpy.sin(x, /, out=None, *, where=True, casting='same_kind', order='K',
dtype=None, subok=True[, signature, extobj]) =  
と記載されているのか意味が解らず困っております。

第１引数のxはわかりますが、  
第２引数以降の  
/, out, *, hwere, casting, order等の調べ方がわかりません。

わかりづらい質問で大変申し訳ございませんが、  
このあたりの調べ方、numpyマニュアルのどの部分を見れば読み解くことができるかご存知の方はいらっしゃいますでしょうか？


CC BY-SA 4.0
2018-12-31T22:32:59.313
51639
2020-06-20T11:23:54.900
31633
question
python numpy
numpyリファレンス　関数の引数にあるスラッシュ以降の意味について


コメントに挙げられたリンクでほぼ全て説明されているのですが、あとから参考になるように日本語で回答を残しておきます。

この記法は numpy 独自のものではなく、 Python のマニュアルで従来から用いられているものです。もともとこれは C で実装された Python
関数の独自の仕様を説明するための記法だったのですが、 Python 3.8 から pure Python
のコードでも使えるようになったので、そちらをもとに説明します。

引数の途中の `/` は、関数定義の引数を左右に分割する目印で、実際に `/` という引数を渡せるわけではありません。実は同じようなものに `*`
という区切りの目印が以前から存在していました。大雑把には以下のような意味です。

  * `/` より左側の引数は **位置専用引数 (positional-only parameters)** で、関数を呼び出すときに、仮引数の名前を使ったキーワード渡し（`f(x=42)` のような）ではなく、仮引数の順番に基づいて引数を渡さなければなりません。
  * `*` より右側の引数は **キーワード専用引数 (keyword-only parameters)** で、キーワードを必ず指定して引数を渡さなければなりません。
  * `/` と `*` の間にある引数は、位置による指定もキーワードによる指定も使えます（通常はこれがデフォルトです）。

[PEP 570](https://www.python.org/dev/peps/pep-0570/) から具体例を引用して説明します。

[code]

    def standard_arg(arg):
        print(arg)
    
    def pos_only_arg(arg, /):
        print(arg)
    
    def kwd_only_arg(*, arg):
        print(arg)
    
    def combined_example(pos_only, /, standard, *, kwd_only):
        print(pos_only, standard, kwd_only)
    
[/code]

このような関数があったときに、最初の関数は `standard_arg(2)` や `standard_arg(arg=2)`
のどちらでも呼び出すことができますが、2番目の関数は `pos_only_arg(arg=1)` とするとエラーになります。同様に、3番目の関数は
`kwd_only_arg(3)` とするとエラーになります。最後の例はすべて混ぜたパターンで、上に書いたとおり `/` と `*`
との相対的な位置によって引数の渡し方が決まります。

より詳しくは [PEP 570](https://www.python.org/dev/peps/pep-0570/) や [Python 3.8
リリースノートの位置専用引数の項目](https://docs.python.org/ja/3/whatsnew/3.8.html#positional-
only-parameters) を参照してください。


CC BY-SA 4.0
2020-06-20T11:23:54.900
67835
2020-06-20T11:23:54.900
40595
51639
answer