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

parece ser el mismo que¿Cuál es la ventaja de usar la declaración 'con .. como' en Python?

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

¿Cuál es la ventaja de utilizar abierta .. ya que en lugar de f =? ¿Es solo azúcar sintáctico? ¿Solo guardando una línea de código?

+1

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

+0

lectura más útil en RAII en http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – wescpy

Respuesta

25

Para ser equivalente a la versión with comunicado, el código que escribió debe buscar su lugar como esto:

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

Si bien esto puede parecer al igual que el azúcar sintáctico, garantiza que liberes recursos. En general, el mundo es más complejo que estos ejemplos artificiales y si olvida un try.. except... o no maneja un caso extremo, tiene fugas de recursos en sus manos.

La declaración with le salva de esas fugas, por lo que es más fácil escribir código limpio. Para una explicación completa, mira PEP 343, tiene muchos ejemplos.

+0

es 'excepto', no' captura' – SilentGhost

+0

@SilentGhost: gracias. –

+1

@ SilentGhost: Buena captura. –

3

El primero aún cierra f si ocurre una excepción durante el f.write().

13

Si f.write lanza una excepción, se llama a f.close() cuando usa with y no se llama en el segundo caso. También f tiene un alcance más pequeño y el código es más limpio cuando se utiliza with.

Cuestiones relacionadas