2010-05-25 11 views
7

Dans les choses Obtenir gnome base de code, je suis tombé sur cette déclaration d'importationQue fait "de MODULE import _" en python?

from GTG import _ 

et ne savent pas ce que cela signifie, jamais vu dans la documentation et une recherche si/rapide Google ne se sont pas quoi que ce soit vers le haut.

Répondre

11

from GTG import _ importe la fonction _ du module GTG dans l'espace de noms "en cours".

Habituellement, la fonction _ est un alias pour gettext.gettext(), une fonction qui affiche la version localisée d'un message donné. La documentation donne une image de ce qui est habituellement passe ailleurs dans un module loin, très loin:

import gettext 
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory') 
gettext.textdomain('myapplication') 
_ = gettext.gettext 
# ... 
print _('This is a translatable string.') 
+0

Salut merci, c'est vraiment utile. Je connaissais la syntaxe générale de 'BLA import bla', donc découvrir cette convention était vraiment ce que je cherchais! L'utilisation d'un tel raccourci est beaucoup plus logique maintenant. Merci – Paul

+0

@bp Utilisation équitable. De plus, la lecture de la documentation est plus importante dans la culture python que l'affirmation des droits de propriété est ... – twneale

4

Ceci importe la fonction/classe/module _ dans l'espace de noms actuel. Donc, au lieu d'avoir à taper GTG._, il vous suffit de taper _ pour l'utiliser.

Voici quelques documents:

http://docs.python.org/tutorial/modules.html#more-on-modules

Il convient de noter que vous devez utiliser avec soin. Faire cela trop pourrait polluer l'espace de noms actuel, rendant le code plus difficile à lire, et éventuellement introduire des erreurs d'exécution. En outre, ne jamais JAMAIS JAMAIS faire cela:

from MODULE import * 

, car il pollue beaucoup l'espace de noms actuel.

Cette technique est la plus utile lorsque vous savez que vous n'utilisez qu'une ou deux fonctions/classes/modules d'un module, car cela ne fait qu'importer les ressources listées.

Par exemple, si je veux utiliser la fonction imap à partir du module itertools, et je sais que je ne aurai pas besoin d'autres itertools fonctions, je pourrais écrire

from itertools import imap 

et ce serait seulement importer le imap fonction.

Comme je l'ai dit plus tôt, cela devrait être utilisé avec précaution, étant donné que certaines personnes peuvent penser que

import itertools 

# ... more code ... 

new_list = itertools.imap(my_func, my_list) 

est plus lisible que

from itertools import imap 

# ... more code ... 

new_list = imap(my_func, my_list) 

comme il fait clairement exactement quel module imap la fonction est venue.

+8

Il convient de mentionner que '_' n'a pas une signification particulière en Python, il est juste une autre comme lettre caractère que vous pouvez utiliser pour nommer une variable. –

+0

@Paul, merci de le signaler. Je connaissais la syntaxe générale de 'GTG import bla' mais le _ me confondait. Maintenant, je pensais qu'il devrait y avoir un fichier _.py dans le dossier du paquet GTG, mais je suppose que c'est faux. le fichier '__init__.py' dans le dossier GTG/a la ligne '_ = traduction.gettext ' alors je suppose que c'est tout ce que _ est alors. Une raison pour laquelle quelqu'un voudrait nommer une fonction d'une manière si étrange? – Paul

+0

@DavidZ Pas complètement vrai. de fibo import * importe tous les noms sauf ceux commençant par un trait de soulignement (_). –

Questions connexes