Mercurial / Python - Che cosa fa l'Underscore funzione?
-
28-09-2019 - |
Domanda
In Mercurial, molte delle estensioni di avvolgere il loro stringa di aiuto / sintassi in una chiamata a una funzione di sottolineatura, in questo modo:
_('[OPTION] [QUEUE]')
Questo mi confonde, perché non sembra necessario (istruzioni le scrittura delle estensioni non parlare di esso) e non sembra essere un _ definita nella classe, quindi mi chiedo se questo è un po 'di sintassi speciale che non capisco, forse un altro modo per dire lambda, o forse l'identità funzione? Inoltre mi chiedo che cosa il beneficio di questa metodologia (qualunque esso sia) è finita solo la stringa cruda come la documentazione suggerisce.
Niente che ho visto nella documentazione Python menzioni tale funzione una, quindi non sono sicuro se questo è davvero una questione di Python, o una domanda Mercurial.
Ecco due esempi che utilizzano questa struttura (sguardo al dizionario cmdtable
vicino alla parte inferiore del file)
Soluzione
Guarda on line 45:
from mercurial.i18n import _
Questo è l'abbreviazione usuale nel pacchetto internazionalizzazione gettext , ed eventualmente altri pacchetti troppo , per la funzione che restituisce una traduzione del suo argomento alla lingua il programma è attualmente in esecuzione. E 'abbreviato in _
per comodità, dal momento che è utilizzato per quasi ogni messaggio visualizzati all'utente.
appare come Mercurial lo avvolge nel proprio modulo. ( "I18n" sta per "internazionalizzazione", perché ci sono 18 lettere in tra "i" e "n").
Altri suggerimenti
_
(un nome di funzione di un singolo trattino) è spesso associata a internazionalizzazione, dovuta al precedente della gettext
, un approccio GNU che ha trovato posto nella libreria standard di Python (stessa architettura completamente diversa implementazione) - per docs del modulo ,
gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])
Questo consente di installare la funzione
_()
in Python builtins spazio dei nomi, sulla base di dominio, localedir, e codeset che vengono passati alla funzione traduzione(). La bandiera è unicode passata alla traduzione risultante dell'oggetto installano () metodo.Per il parametro nomi, vedere la descrizione della traduzione dell'oggetto installano () metodo.
Come si è visto al di sotto, di solito contrassegnare la stringhe nell'applicazione che sono i candidati per la traduzione, per avvolgendoli in una chiamata al
_()
la funzione, in questo modo:
print _('This string will be translated.')
Per comodità, è desidera che la funzione
_()
da installare in builtins spazio dei nomi di Python, in modo da è facilmente accessibile in tutti i moduli di l'applicazione.
Come @ptomato menzioni, Mercurial ha seguito questa tradizione nominando _
la funzione equivalente della propria che usano per le finalità stessa di internazionalizzazione.
C'è anche una tradizione separato per uso _
come il "non mi interessa" identificativo, come in
fee, fie, _, _, foo, _, fum = thesevenitemstuple
, ma, naturalmente, è meglio non utilizzare entrambe le tradizioni in una sola volta nello stesso codice; -)