2016-07-14 114 views
11

Volevo vedere come è stata implementata una funzione math.py, ma quando ho aperto il file ho scoperto che tutte le funzioni sono vuote e c'è un semplice pass. Ad esempio:Perché alcune funzioni di Python hanno solo il passaggio?

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 

Suppongo che sia perché le funzioni utilizzate sono effettivamente dalla libreria standard C. Come funziona ?

+1

'math.py'? Cosa 'math.py'? Non penso che Python abbia un tale file. Il modulo 'math' è implementato in [' Modules/mathmodule.c'] (https://hg.python.org/cpython/file/2.7/Modules/mathmodule.c), un file che probabilmente non fa il suo modo nell'installazione di Python. – user2357112

+1

Googling "Python real signature unknown" suggerisce che questa è una sorta di funzionalità PyCharm e PyCharm ti sta mentendo. – user2357112

+0

Esatto, pycharm mi dice che 'math.py' esiste. E 'un file con tutte le funzioni matematiche che sono vuote come il 'ceil' che ho messo nella mia domanda. – edgarstack

risposta

11

PyCharm ti sta mentendo. Il codice sorgente che stai guardando è un falso che PyCharm ha creato. PyCharm sa quali funzioni dovrebbero esserci e può indovinare le proprie firme usando le docstring della funzione, ma non ha idea di come dovrebbero essere i corpi delle funzioni.

Se si desidera visualizzare il codice sorgente reale, è possibile visualizzarlo nel repository Mercurial ufficiale in Modules/mathmodule.c. Il codice sorgente C definisce alcune funzioni e macro per la generazione di wrapper attorno alle funzioni matematiche della libreria standard C, quindi utilizza le macro per definire le funzioni math.ceil di Python e altre funzioni.

Problemi correlati