web-dev-qa-db-fra.com

Pourquoi certaines fonctions intégrées Python ont-elles réussi?

Je voulais voir comment un math.py la fonction a été implémentée, mais quand j'ai ouvert le fichier dans PyCharm, j'ai trouvé que toutes les fonctions étaient vides et qu'il y avait un simple pass. Par exemple:

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

Je suppose que c'est parce que les fonctions utilisées proviennent en fait de la bibliothèque standard C. Comment ça marche?

37
edgarstack

PyCharm vous ment. Le code source que vous regardez est un faux créé par PyCharm. PyCharm sait quelles fonctions devraient être présentes, et il peut deviner leurs signatures à l'aide des docstrings de fonction, mais il n'a aucune idée de ce à quoi les corps de fonction devraient ressembler.

Si vous voulez voir le vrai code source, vous pouvez le regarder dans le dépôt Github officiel dans Modules/mathmodule.c . Un grand nombre de fonctions sont des enveloppes minces générées par macro autour des fonctions C de math.h, mais il y a aussi un tas de code écrit manuellement pour gérer des choses comme des implémentations de bibliothèque standard incohérentes ou insuffisantes, des fonctions sans math.h équivalent, et des crochets de personnalisation comme __ceil__.