2012-08-13 15 views
16

Eventuali duplicati:
Python - When to use file vs openPerché open() preferibile su file() in Python?

Dalla documentazione ufficiale di Python,

http://docs.python.org/library/functions.html#file

Quando si apre un file, è preferibile usare open() al posto di invocare questo costruttore direttamente

Ma non ci sono motivi.

+3

Per cominciare, è andato in Python 3. Anche se questa è una conseguenza e un rinforzo, non una ragione. – delnan

+0

@delnan Che tipo restituisce 'open' in py3? – Marcin

+1

Non sono positivo su questo, quindi non avrò una risposta, ma potrebbe avere a che fare con il modo in cui Python gestisce la parola chiave "with". Non sono sicuro che tu possa utilizzare "with" con un costruttore. –

risposta

15

The Zen of Python:

Ci dovrebbe essere tra-- e, preferibilmente, un solo modo --obvious per farlo.

Quindi, file o open dovrebbero andare.

>>> type(file) 
<type 'type'> 
>>> type(open) 
<type 'builtin_function_or_method'> 

open è una funzione che può restituire qualsiasi cosa. file() restituisce solo oggetti file.

Anche se sembra open restituisce solo file oggetti in Python 2. E prima di Python 2.5 file e open sono lo stesso oggetto.

Come suggerito da @gnibbler nei commenti, il motivo originale dell'esistenza di file potrebbe essere quello di utilizzarlo come nome per le classi di base.

Inoltre, file() in linea di principio potrebbe tornare di altri tipi, come ad esempio ha fatto int() su versioni precedenti di Python:

>>> type(int(2**64)) is long 
True 
>>> type(int()) is int 
True 
>>> int is long 
False 

Questa risposta è molto simile a @Ryan's answer.

Inoltre BDFL said:

"La classe file è nuovo in Python 2.2 e rappresenta il tipo (classe) di oggetti restituiti dalla funzione built-in open() Il suo costruttore è un.. alias per open(), ma per compatibilità futura e retrocessione, open() rimane preferito. " (enfasi miniera)

+0

In realtà restituisce qualcosa tranne gli oggetti 'file'? – delnan

+1

@delnan: per quanto ne so restituisce gli oggetti 'file' su Python 2. Restituisce oggetti di diverso tipo su Python 3. – jfs

+0

Originariamente' file' era e alias di 'open' perché sembrava scomodo creare una sottoclasse di' open' –

Problemi correlati