что делает “от импорта МОДУЛЯ _”, делают в Python?

В Получении вещей кодовая база гнома я наткнулся на этого оператора импорта

from GTG import _  

и понятия не имейте, что это означает, никогда не замечаемый это в документации и быстром так / поиск Google ничего не поднял.

7
задан Paul 14 September 2016 в 07:37
поделиться

2 ответа

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.')
12
ответ дан 6 December 2019 в 12:46
поделиться

Это импортирует функцию/класс/модуль _ в текущее пространство имен. Таким образом, вместо того, чтобы набирать 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.

4
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: