В Получении вещей кодовая база гнома я наткнулся на этого оператора импорта
from GTG import _
и понятия не имейте, что это означает, никогда не замечаемый это в документации и быстром так / поиск Google ничего не поднял.
from GTG import _
импортирует функцию _
из модуля GTG
в «текущее» пространство имен.
Обычно функция _
является псевдонимом для gettext.gettext ()
, функции, которая показывает локализованную версию данного сообщения.Документация дает представление о том, что обычно происходит где-то еще в далеком-далеком модуле:
import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')
Это импортирует функцию/класс/модуль _
в текущее пространство имен. Таким образом, вместо того, чтобы набирать GTG._
, вы просто набираете _
, чтобы использовать его.
Вот некоторая документация:
http://docs.python.org/tutorial/modules.html#more-on-modules
Следует отметить, что использовать это нужно с осторожностью. Слишком частое использование может привести к загрязнению текущего пространства имен, что сделает код более трудным для чтения и, возможно, приведет к ошибкам во время выполнения. Также НИКОГДА НИКОГДА НИКОГДА не делайте этого:
from MODULE import *
, так как это очень сильно загрязняет текущее пространство имен.
Эта техника наиболее полезна, когда вы знаете, что собираетесь использовать только одну или две функции/класса/модуля из модуля, так как при этом импортируются только перечисленные активы.
Например, если я хочу использовать функцию imap
из модуля itertools
и знаю, что мне не понадобятся другие функции itertools
, я могу написать
from itertools import imap
и она импортирует только функцию imap
.
Как я уже говорил, это следует использовать с осторожностью, так как некоторые люди могут подумать, что
import itertools
# ... more code ...
new_list = itertools.imap(my_func, my_list)
более читабелен, чем
from itertools import imap
# ... more code ...
new_list = imap(my_func, my_list)
так как он дает понять, из какого именно модуля взята функция imap
.