Ciao!
A livello intuitivo sinceramente penso si tratti della stessa cosa, l'unica differenza è che usando with open(...) as... abbiamo un'indentazione molto più ordinata e ricorda che usiamo tale metodo per poter scrivere direttamente delle informazioni sul file. Quindi lo usiamo quando a priori conosciamo ciò che dobbiamo scrivere o leggere, visto che usando tale sintassi poi andremo a scrivere all'interno di essa come se fosse (banalmente) un if o qualsiasi costrutto di questo genere, ovvero diciamo "all'apertura del file: fai questo".
Invece usiamo l'assegnazione ad una variabile x l'apertura del file quando vogliamo applicare delle modifiche alla variabile x solo dopo altre istruzioni.
Esempio:
Nell'esercizio 2 del secondo homework ti conviene usare with open()... perché sai già cosa dovrai scrivere sul file, invece se avevi bisogno di attuare delle operazioni prima di scrivere su di esso (come ad esempio: leggere il file, trovare una parola data in input e, dopo averla trovata, scriverla alla fine del file stesso) sarebbe stato molto più comodo l'uso di una variabile di appoggio che contiene l'intero file.
Infine ricorda che con l'assegnazione ad una variabile il contenuto del file sarai costretto ad usare il metodo close() per chiuderlo.
Sperando di essere stato chiaro,
- Francesco Pio Scognamiglio