Perché il metodo 'format' non è più usato in Python?

8

Probabilmente mi manca qualcosa qui, dopo aver cercato non sono riuscito a trovare una risposta.

Ho esplorato alcuni progetti Python e una cosa che continuo a notare è il fatto che la maggior parte di loro continua a utilizzare l'operatore % per la formattazione delle stringhe anziché la più recente, consigliata .format() metodo. C'è una ragione per questo? sembra un cambiamento banale, a meno che mi manchi qualcosa completamente.

Ad esempio:

# count how many times the % operator technique is used
find . -name "*.py" -exec grep -HE "\"[^\"]+\"\s\%\s\w+|'[^']+'\s\%\s\w+" {} \; | wc -l

# and the same for format()
find . -name "*.py" -exec grep -HE "\w+\.format\(" {} \; | wc -l

# Results:
#
#               % operator        format()
# iPython          670               63
# Django           977               8
# Tornado          91                0
# requests         25                1

Nessun vero motivo per questa domanda, solo curioso.

Ciao ragazzi!

    
posta Matt 21.02.2013 - 13:53
fonte

4 risposte

16

Tre inclinazioni estremamente forti si uniscono per produrre questo effetto:

  1. Comfort: "So come fare questo alla vecchia maniera, imparare il nuovo modo sarebbe più difficile."
  2. compromesso sforzo / effetto: "Il vecchio metodo è andato? È anche deprecato? No? Quindi non c'è alcun business case per cambiarlo. Crea un nuovo codice, invece."
  3. Sicurezza: "Sei sicuro che il nuovo modo proposto di fare le cose è esattamente equivalente? No? Allora meglio lasciare il vecchio codice così com'è - potresti introdurre dei difetti."

Tutti e tre sono, in effetti, abbastanza sensibili (il primo meno, dal momento che l'apprendimento continuo è ciò che gli operatori dell'informazione dovrebbero prosperare).

( Modifica: come indicato di seguito, c'è un quarto punto: non sapere che il nuovo metodo esiste anche! Questo è meno sensibile, ma potrebbe essere effettivamente il più comune.)

    
risposta data 21.02.2013 - 14:05
fonte
6

Oltre agli altri motivi, aggiungerei compatibilità e coerenza all'indietro. Spesso è necessario scrivere script che possono essere eseguiti su computer di altre persone, che non vogliono o non sono in grado di eseguire l'aggiornamento all'ultimo e più grande Python. Quindi scrivi al minimo comune denominatore. Con il tempo in cui i tuoi utenti sono passati ad una versione sufficientemente recente di Python probabilmente hai dimenticato quali funzionalità sono apparse in quale versione di Python. A meno che non siano caratteristiche di eccezionale valore, potrebbe non valere la pena dedicare tempo alla ricerca, alla considerazione e alla decisione se sia ora sicuro utilizzare ciascuna funzione. Il metodo del metodo di formattazione è una buona API da utilizzare nel nuovo codice, ma il caso per introdurlo in un code-base che già utilizza% estensivamente non è così strong.

    
risposta data 21.02.2013 - 14:30
fonte
2

Quando sviluppi software per uso personale, è spesso a tuo vantaggio utilizzare versioni più recenti delle tue librerie e strumenti di sviluppo. Tuttavia, i progetti che stai guardando sono librerie e strumenti di sviluppo pensati per essere condivisi con la comunità. In questi casi, si desidera essere prudenti nelle funzionalità richieste per ottenere la più ampia base installata e amp; ottenere il maggior numero di persone coinvolte nel progetto.

Il metodo format() non è stato aggiunto fino alla versione di Python 3.0 / 2.6 nel 2008. Sembra molto tempo fa ma tieni presente che raramente le persone utilizzano la prima versione del software. Mettiamolo nel contesto di quando è diventato disponibile in due delle distribuzioni Linux più "serie". RHEL 5.x usa ancora Python 2.4 ed è supportato fino al 2017 - 6.x ha Python 2.6 ma non è stato rilasciato fino al 2010. Nel campo Debian non avevano Python 2.6 fino alla serie 6.x che divenne stabile in 2011.

Quindi, anche se potrebbe avere senso, se stavate iniziando un progetto come Django (originariamente pubblicato nel 2005) oggi, per standardizzare sul nuovo metodo, c'è davvero poco valore nel tornare indietro e cambiare tutte le 1000 ricorrenze del vecchio metodo senza che sia stato formalmente deprecato. Rende il lavoro, crea la possibilità di introdurre bug e amp; aumenta inutilmente i requisiti di sistema.

    
risposta data 21.02.2013 - 19:03
fonte
0

Aggiunta alla risposta di @ KilianFoth; Portare un grande progetto su una versione software superiore ha troppo lavoro da fare. E la modifica di un utilizzo non deprecato ha la minima importanza nel processo di aggiornamento.

Probabilmente stanno usando il nuovo formato nelle parti completamente riscritte e non cambiano l'utilizzo esistente sul resto.

    
risposta data 21.02.2013 - 14:30
fonte

Leggi altre domande sui tag