Gemäß den comments in the source code,
Konvertieren einer Zahl oder Zeichenkette in einer ganzen Zahl oder 0 zurück, wenn keine Argumente gegeben sind. Wenn x eine Zahl ist, geben Sie x.__int__
() zurück. Für Gleitkommazahlen schneidet dies in Richtung Null ab.
Wenn x keine Zahl ist, oder wenn Base gegeben ist, dann muß x eine Zeichenfolge sein, Bytes oder bytearray weise ein ganzzahliges Literal in der gegebenen Basisrepräsentiere
Also, wenn der Eingang Eine Nummer, __int__
Funktion wird für dieses Objekt aufgerufen und das Ergebnis wird zurückgegeben. Intern nb_int
is an item in PyNumberMethods structure, was der __int__
Funktion entspricht. Gemäß der neuesten Quellcode zum Zeitpunkt des Schreibens dieses Artikels, long_long
is the function which corresponds to the nb_int
function, die wie diese
long_long(PyObject *v)
{
if (PyLong_CheckExact(v))
Py_INCREF(v);
else
v = _PyLong_Copy((PyLongObject *)v);
return v;
}
Hier PyLong_checkExact
ist ein Makro definiert ist, das, wenn sie nur überprüft das aktuelle Objekt wirklich vom Typ ist lang. Wenn es wahr ist, erhöht es einfach die Referenzzählung und gibt das Objekt zurück, so wie es ist, nichts ist mehr getan.
Wenn die Eingabe in Form einer Zeichenfolge erfolgt, muss die Zeichenfolge in eine Zahl mit der Funktion PyLong_FromUnicodeObject
konvertiert werden.
'int' literal ist eigentlich eine Zeichenfolge ohne Anführungszeichen. Diese Konvertierung wird während der Kompilierung durchgeführt (also während der ersten Verarbeitung des Quellcodes). Das 'int'-Objekt des Pythons muss in beiden Fällen konstruiert sein. Da Python keine Maschine 'int' verwendet, sollte die Komplexität in beiden Fällen ähnlich sein. – pepr