Załóżmy, że chcemy zaimplementować odpowiednik PHP file_get_content
.jak zdobyć zawartość małego pliku ASCII w Pythonie?
Jaka jest najlepsza praktyka? (elegancki i niezawodny)
Oto kilka propozycji, czy są one prawidłowe?
użyciu with
oświadczenie:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
obsługuje standard open()
bezpieczne?
def file_get_contents(filename):
return open(filename).read()
Co dzieje się z deskryptorem pliku w obu rozwiązaniach?
od PEP 343: http://www.python.org/dev/peps/pep-0343 Należy pamiętać, że nie jesteśmy gwarantując, że w końcu klauzula jest wykonywany natychmiast po obiekcie generatora staje nieużywany, choć jest to jak to będzie działać w CPython. Jest to podobne do automatycznego zamykania plików: podczas gdy implementacja liczenia odwołań, jak CPython, powoduje zwolnienie obiektu, gdy zniknie ostatnie odwołanie do niego, implementacje używające innych algorytmów GC nie dają tej samej gwarancji. Odnosi się to do Jython, IronPython i prawdopodobnie do Pythona działającego na Parrot. – kriss
@kriss: Zauważ, że nie jest to sprzeczne oświadczenia o prowadzeniu '__exit__' gdy opuszcza ciało - to tylko szczegóły tego, co się dzieje, jeśli ** nie ** wyjście ciało poprzez generator zawieszony w menedżerze kontekstowego i jak Python zmusi go do odejścia przez podniesienie wyjątku. – Brian