2016-05-23 10 views
1

Ich bin mir ziemlich sicher, dass ich etwas Dummes mache, aber nicht herausfinden kann, was es ist.Python: Typ (i) ist int ... aber ich bin int = Falsch

predict = fn_abc(data) 

In[3]: predict 
Out[3]: array([2]) 
In[4]: type(predict) 
Out[4]: numpy.ndarray 

Jetzt ist mein fn_abc mit int

predict = int(fn_abc(data)) 

In[6]: predict 
Out[6]: 2 
In[7]: type(predict) 
Out[7]: int 
In[8]: predict is int 
Out[8]: False 

Einwickeln Was mache ich falsch?

+2

Sie haben die Bedeutung von 'is' falsch verstanden. Versuchen Sie http://stackoverflow.com/questions/13650293/understanding-pythons-is-operator –

Antwort

2
type(predict) is int 

vorhersagen 2 ist; ist int überprüft, ob der andere Artikel Typ 'Int' ist, aber ist kein Typ. Es gibt auch eine isinstance Methode, die noch besser wäre.

3

predict is int überprüft, ob die ganze Zahl die gleiche Identität wie das Ganzzahl-Objekt hat. Es tut nicht. Der Typ dieser Ganzzahl ist jedoch gleich das Ganzzahl-Objekt. Überprüfen Sie, ob der Typ der Ganzzahl dem Ganzzahl-Objekt entspricht.

>>> type(2) == int 
True 

können Sie dieses Kontroll erweitern auch isinstance() mit der integrierten Funktion Subklassen zu handhaben:

>>> isinstance(2, int) 
True 
>>> isinstance(True, int) 
True 

Der zweite Test prüft, ob True ist eine Instanz einer ganzen Zahl. Da bool eine Unterklasse von int ist, ist dies genau. Dies ist nützlich für benutzerdefinierte Klassen - wenn Sie eine Person Klasse mit einer Customer Unterklasse haben, wird isinstance() Ihnen sagen, dass ein Customer Objekt auch ein Person ist. Allerdings sind nicht alle Person Objekte sind Customer Objekte, so ist es nicht kommutativ (wie unten gezeigt mit bool und einer ganzen Zahl):

>>> isinstance(2, bool) 
False 
Verwandte Themen