Solo una domanda fondamentale per quanto riguarda pitone e .join() metodo:generatore di Python e .join
file1 = open(f1,"r")
file2 = open(f2,"r")
file3 = open("results","w")
diff = difflib.Differ()
result = diff.compare(file1.read(),file2.read())
file3.write("".join(result)),
È possibile che questo frammento di codice produce una bella uscita memorizzato in un file chiamato "risultati", in formato stringa , mostrando le differenze tra i due file riga per riga. Tuttavia noto che se stampo semplicemente "risultato" senza utilizzando .join(), il compilatore restituisce un messaggio che include un indirizzo di memoria. Dopo aver provato a scrivere il risultato nel file senza utilizzando .join(), il compilatore mi ha informato che nel metodo .join() e non negli oggetti generatore possono essere utilizzate solo stringhe e buffer di caratteri. Quindi, in base al largo di tutte le prove che ho addotto, per favore correggetemi se sbaglio:
result = diff.compare(file1.read(),file2.read())
< ---- risultato è un oggetto generatore?result
è un elenco di stringhe, conresult
è di per sé il riferimento alla prima stringa?.join()
prende un indirizzo di memoria e punta al primo e quindi scorre il resto degli indirizzi di stringhe in quella struttura?Un oggetto generatore è un oggetto che restituisce un puntatore?
Mi scuso se le mie domande non sono chiare, ma io fondamentalmente volevo chiedere i veterani pitone se le mie deduzioni erano corrette. La mia domanda è meno sui risultati osservabili, e molto più sui meccanismi interni di Python. Apprezzo tutto il tuo aiuto.
Qual è il messaggio? – Marcin
Non si dispone di un indirizzo di memoria; python ti fornisce una rappresentazione di un oggetto e l'impostazione predefinita per gli oggetti personalizzati è quella di mostrare il tipo e l'indirizzo di memoria dell'oggetto. C'è ancora un oggetto lì. –