2016-01-16 11 views
7

Stavo passando una domanda in Checkio. E poi mi sono imbattuto in questo.Confronto dei moduli in Python. Ok ma perche?

import re,math 
re > math # returns True 
math > re # returns False 

Qualcuno può spiegare come Python si confronta tra QUALSIASI COSA.

Python esegue questa operazione fornendo una gerarchia per i moduli. Inoltre,

re > 1 # return True # Ok, But Why? 

Gradirei davvero alcune spiegazioni profonde su queste cose!

risposta

4

Tutto è un oggetto. E i moduli non fanno eccezione. Pertanto:

import re, math 

print(id(re), id(math)) 
print(re > math) 
print(id(re) > id(math)) 
print(re < math) 
print(id(re) < id(math)) 
print(id(re), id(math)) 

Nel mio caso:

39785048 40578360 
False 
False 
True 
True 
39785048 40578360 

tua situazione potrebbe essere diversa, perché i vostri ID non sarà la mia e quindi il confronto può essere invertito nel tuo caso.

+0

Infatti, se riavvio la sessione (in modo che l'importazione abbia di nuovo effetto), gli ID saranno diversi. – Reti43

+0

Nessuna sorpresa lì. Nuovo posizionamento della memoria per i moduli. Puoi farlo senza un riavvio. Elimina il modulo ed eliminalo da 'sys.modules' e reimportalo. Nella maggior parte dei casi anche l'id sarà cambiato. Puoi anche fare qualcosa come "a = 5" tra l'eliminazione e la reimportazione. – mementum