web-dev-qa-db-ja.com

一部の組み込みPython関数はパスしか持っていないのはなぜですか?

math.py関数が実装されましたが、PyCharmでファイルを開くと、すべての関数が空であり、単純なpassがあることがわかりました。例えば:

def ceil(x): # real signature unknown; restored from __doc__
    """
    ceil(x)

    Return the ceiling of x as a float.
    This is the smallest integral value >= x.
    """
    pass

使用されている関数が実際にはC標準ライブラリからのものだからだと思います。それはどのように機能しますか?

37
edgarstack

PyCharmはあなたに嘘をついています。あなたが見ているソースコードは、PyCharmが作成した偽物です。 PyCharmはそこにあるべき関数を知っており、関数のdocstringsを使用してシグネチャを推測できますが、関数の本体がどのように見えるかはわかりません。

実際のソースコードを確認したい場合は、公式Githubリポジトリの Modules/mathmodule.c で確認できます。そこの関数の多くは、math.hからのC関数の周りにマクロ生成された薄いラッパーですが、一貫性のない、または不十分な標準ライブラリ実装、math.h相当、および__ceil__のようなカスタマイズフック。