【Pythonノート】Pythonの一部のソースコードにおけるメソッドはpassプレースホルダのみ解釈

1615 ワード

Python定義関数は、関数体が必要です.そうしないと、コンパイルが間違っています.関数体をpassで占有するのは、エラーを防止し、何の動作もしません.このpassのみの関数には、一般的に以下のいくつかの可能性があります.
1、親クラスで関数を宣言しますが、実装を宣言しないで、継承した子クラスによって実装されます.つまり、これは空の方法です.
2、この関数の具体的な実装はPythonではなく、例えばCのような効率的な文法で記述され、パッケージの中で1つの空の方法でビットを占め、呼び出すときはC言語で実現する方法を呼び出す.Pythonには、大量の演算が必要な内蔵関数がCまたはC++で書かれています.
例えばここでは
def next(iterator, default=None): # real signature unknown; restored from __doc__
    """
    next(iterator[, default])
    
    Return the next item from the iterator. If default is given and the iterator
    is exhausted, it is returned instead of raising StopIteration.
    """
    pass

下層はc言語で実現され、ここで定義された関数はインタフェースと使用説明に似ているだけです(cソースコードを見たい場合は、どのように使うかを教えてくれるだけです).help(str)を見ると表示されるからです.目的は、各関数が何をしているのか、注釈反射によってドキュメントを実現する方法です.たとえば、以下で定義する関数
def func(a: int, b: str):
    return b * a

intとstrは何の役にも立たないがinspectを使うとgetfullargspec(func).annotationsの場合,各変数の定義と同様に定義が見られるが,もちろん定義はクラスに加えて関数,定数などであってもよい.
あなたが見たのはpassですが、実際にはそうではありません.
Python内蔵関数の実装は,Python自体の実装方式,すなわちこの解釈器がどのように実現されているかにかかわる.
Pythonの解釈器にはcjava pythonなど多くの実装があり、一般的には奇妙な操作をしない限り、c言語で実装されるCPythonはほとんどの要件を満たすことができ、これも公式に提供されているデフォルト実装である.
したがってCPythonを使用していると仮定すると、解釈器標準実装の一部として、それらの内蔵関数もc言語で実装されています.つまり、通常はpassも見えません.
PyCharmというIDEは、現在の解釈器のすべての関数タイプなどのインデックスを維持し、ジャンプを定義する操作を行うことができます.しかし、内蔵関数では、対応する実装が見つからず、ドキュメントpydocのみが利用可能であり、PyCharmはドキュメントに基づいてこれらの関数の署名、すなわちコンテンツがpassの関数を自動的に生成する.
これらの関数の具体的な実装にはpythonのソースコードを探す必要があります.公式ドキュメントextending python with c(この名前は多くありません)を参照して、cが書いたものがpythonにどのように使われているかを見てみましょう.