2016-07-14 34 views
11

Chciałem zobaczyć, w jaki sposób została zaimplementowana funkcja math.py, ale kiedy otworzyłem plik, stwierdziłem, że wszystkie funkcje są puste i istnieje prosty pass. Na przykład:Dlaczego niektóre funkcje budowania Pythona mają tylko przepustkę?

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 

Sądzę, że dzieje się tak dlatego, że używane funkcje są w rzeczywistości ze standardowej biblioteki C. Jak to działa ?

+1

'math.py'? Co to jest "math.py"? Nie sądzę, że Python ma taki plik. Moduł 'matematyka' jest zaimplementowany w [' Modules/mathmodule.c'] (https://hg.python.org/cpython/file/2.7/Modules/mathmodule.c), pliku, który prawdopodobnie nie robi tego sposób na instalację w Pythonie. – user2357112

+1

Googling "Python real signature unknown" sugeruje, że jest to jakaś funkcjonalność PyCharm, a PyCharm cię okłamuje. – user2357112

+0

Dokładnie, pycharm mówi mi, że 'math.py' istnieje. I jest to plik z wszystkimi funkcjami matematycznymi, które są puste jak "ceil", które wkładam w moje pytanie. – edgarstack

Odpowiedz

11

PyCharm cię okłamuje. Kod źródłowy, który przeglądasz, jest fałszywką stworzoną przez PyCharm. PyCharm wie, jakie funkcje powinny tam być i może odgadnąć na ich podstawie za pomocą funkcji docstrukcji funkcji, ale nie ma pojęcia, jak powinny wyglądać ciała funkcyjne.

Jeśli chcesz zobaczyć prawdziwy kod źródłowy, możesz go przejrzeć w oficjalnym repozytorium Mercurial pod numerem Modules/mathmodule.c. Kod źródłowy C definiuje kilka funkcji i makr do generowania wrapperów wokół funkcji matematycznych biblioteki standardowej C, a następnie wykorzystuje makra do zdefiniowania Pythona math.ceil i innych funkcji.