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

semble être le même queQuel est l'avantage d'utiliser l'instruction 'with .. as' en Python?

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

Quel est l'avantage d'utiliser ouvert .. comme au lieu de f =? Est-ce juste du sucre syntaxique? Juste en train d'enregistrer une ligne de code?

+1

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

+0

plus de lecture utile sur RAII à http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – wescpy

Répondre

25

Pour être équivalent à la version de l'instruction with, le code que vous avez écrit devrait plutôt regarder comme ceci:

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

Bien que cela puisse paraître comme le sucre syntaxique, il garantit que vous libérez des ressources. Généralement le monde est plus complexe que ces exemples artificiels et si vous oubliez un try.. except... ou ne parvenez pas à gérer un cas extrême, vous avez des fuites de ressources sur vos mains.

L'instruction with vous évite ces fuites, ce qui facilite l'écriture de code propre. Pour une explication complète, regardez PEP 343, il a beaucoup d'exemples.

+0

c'est 'except', pas' catch' – SilentGhost

+0

@SilentGhost: merci. –

+1

@SilentGhost: Bonne prise. –

3

Le premier ferme toujours f si une exception se produit pendant le f.write().

13

Si f.write déclenche une exception, f.close() est appelée lorsque vous utilisez with et qu'elle n'est pas appelée dans le second cas. En outre f a un plus petit champ et le code est plus propre lorsque vous utilisez with.