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)
Per cominciare, è andato in Python 3. Anche se questa è una conseguenza e un rinforzo, non una ragione. – delnan
@delnan Che tipo restituisce 'open' in py3? – Marcin
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. –