Question

with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

semble être le même que

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? sauver une seule ligne de code?

Était-ce utile?

La solution

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 sembler sucre syntaxique, il assure que vous libérer des ressources. En général, le monde est plus complexe que ces exemples inventé et si vous oubliez un try.. except... ou ne parviennent pas à traiter un cas extrême, vous avez des fuites de ressources sur vos mains.

L'instruction with vous évite de ces fuites, ce qui rend plus facile d'écrire un code propre. Pour une explication complète, consultez PEP 343 , il a beaucoup d'exemples.

Autres conseils

Si f.write lève une exception, f.close() est appelée lorsque vous utilisez with et non appelé dans le second cas. Aussi f a une portée plus faible et le code est propre lors de l'utilisation with.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top