2010-04-29 16 views
18
 
with open("hello.txt", "wb") as f: 
    f.write("Hello Python!\n") 

sembra essere lo stesso diQual è il vantaggio dell'uso dell'istruzione 'with .. as' in Python?

f = open("hello.txt", "wb") 
f.write("Hello Python!\n") 
f.close() 

Qual è il vantaggio di utilizzare aperta .. come al posto di f =? È solo zucchero sintattico? Stai salvando solo una riga di codice?

+1

http://effbot.org/zone/python-with-statement.htm –

+0

lettura più utile su RAII su http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – wescpy

risposta

25

Per essere equivalente alla versione with dichiarazione, il codice che hai scritto dovrebbe essere invece in questo modo:

f = open("hello.txt", "wb") 
try: 
    f.write("Hello Python!\n") 
finally: 
    f.close() 

Anche se questo potrebbe sembrare come lo zucchero sintattico, ti assicura di rilasciare risorse. Generalmente il mondo è più complesso di questi esempi artificiali e se dimentichi uno try.. except... o non riesci a gestire un caso estremo, hai delle perdite di risorse a portata di mano.

L'istruzione with consente di risparmiare da tali perdite, semplificando la scrittura di codice pulito. Per una spiegazione completa, guarda a PEP 343, ha un sacco di esempi.

+0

è 'except', non' catch' – SilentGhost

+0

@ SilentGhost: grazie. –

+1

@SilentGhost: buona presa. –

3

Il primo chiude ancora f se si verifica un'eccezione durante f.write().

13

Se f.write genera un'eccezione, f.close() viene chiamato quando si utilizza with e non viene chiamato nel secondo caso. Anche f ha un ambito più piccolo e il codice è più pulito quando si utilizza with.

Problemi correlati