Questa domanda è di tipo filosofico. C'è un modulo splendido itertools
in Python 2, che fornisce, in particolare, equivalenti generatori per funzioni built-in Python come map
, filter
, zip
o slice
. E gli equivalenti sono chiamati imap
, ifilter
, izip
, e islice
, rispettivamente. Come ho capito, il prefisso i nel loro nome significa i terator. Ma c'è la stessa cosa su xrange
: è un equivalente di range
che restituisce un oggetto generatore anziché una lista grande. Quindi, perché non si chiama irange
? Che cosa significa in realtà il prefisso x?Python 2: perché xrange non è chiamato irange?
5
A
risposta
4
Perché xrange()
è stato aggiunto alla lingua prima di iteratori e non è esso stesso un iteratore.
- Iteratori sono stati aggiunti in PEP 234, una proposta creata nel 2001.
xrange()
was added to Python in 1993.
Python 1.0 è stato rilasciato nel 1994, quindi xrange()
è stato aggiunto molto presto. Probabilmente il x
non ha un significato specifico qui.
Ma xrange()
non è realmente un iteratore, è un iterable; puoi scorrere su di esso più volte, a differenza degli iteratori. È anche una sequenza, poiché ha una lunghezza e può essere indicizzata.
Come tale l'oggetto è stato rinominato in range()
(sostituendo completamente la funzione Python 2 range()
e il suo comportamento in sequenza è stato ulteriormente ampliato.
Grazie, ma cosa significa ** x **? –
In realtà non lo so; dovresti chiedere a Guido. Non penso che stia per niente. Probabilmente è un riferimento a un oggetto simile in un'altra lingua, o solo un prefisso per differenziarlo da 'range()'. –
Non c'è una differenza nell'implementazione effettiva? Per quanto ne so, 'range()' in CPython è un'implementazione ottimizzata per la velocità, usando C long int, mentre 'irange() 'è un normale iteratore, fornendo la stessa funzionalità come' range() '. – Mkoch