Подвижный / Python - Что Делает Функция Подчеркивания?

В Подвижном многие расширения переносят свою строку справки/синтаксиса в вызов к функции подчеркивания, как так:

 _('[OPTION] [QUEUE]')

Это смущает меня, потому что это не кажется необходимым (инструкции по Расширениям Записи не упоминают это) и, кажется, нет _ определен в классе, таким образом, я задаюсь вопросом, является ли это некоторым специальным синтаксисом, который я не понимаю, возможно, другой способ сказать лямбду или возможно тождественное отображение? Дополнительно я задаюсь вопросом, что преимущество этой методологии (независимо от того, что это) закончено просто, необработанная строка как документация предлагает.

Ничто, что я видел в документации Python, не упоминает такую функцию, таким образом, я не уверен, является ли это действительно вопросом о Python или Подвижным вопросом.

Вот два примера, которые используют эту структуру (взгляд на cmdtable словарь около нижней части файла)

6
задан Vadim Kotov 19 June 2017 в 12:49
поделиться

2 ответа

Посмотрите строку 45:

from mercurial.i18n import _

Это обычное сокращение в пакете интернационализации gettext и, возможно, в других пакетах, для функции, которая возвращает перевод своего аргумент языка, на котором в настоящее время выполняется программа. Для удобства он сокращен до _ , поскольку используется практически для каждого сообщения, отображаемого пользователю.

Похоже, Mercurial оборачивает его в свой собственный модуль. («i18n» означает «интернационализация», потому что между «i» и «n» 18 букв.)

8
ответ дан 8 December 2019 в 15:59
поделиться

_ (имя функции с одним подчеркиванием) часто ассоциируется с интернационализацией из-за прецедента gettext, подхода GNU, который также нашел место в стандартной библиотеке Python (та же архитектура, совершенно другая реализация) - согласно документации модуля,

gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])

Это устанавливает функцию _() во встроенные имена Python. пространство имен Python builtins, основанное на домен, localedir и codeset, которые передаются в функцию translation(). Флаг юникода передается полученному переводу в метод install() полученного объекта.

О параметре names см. описание метода translation метода install() объекта translation.

Как показано ниже, вы обычно помечаете строки в вашем приложении, которые являются кандидатами на перевод, путем обернув их в вызов функции _() , например, так:

print _('This string will be translated.') 

Для удобства вы хотите, чтобы функция _() была установлена в пространство имен Python builtins, чтобы она была чтобы она была легко доступна во всех модулях вашего приложения.

Как упоминает @ptomato, Mercurial последовал этой традиции, назвав _ эквивалентной функцией свою собственную, которую они используют для тех же целей интернационализации.

Существует также отдельная традиция использовать _ в качестве идентификатора "мне все равно", как в

fee, fie, _, _, foo, _, fum = thesevenitemstuple

но, конечно, вам лучше не использовать обе традиции сразу в одном коде; -)

.
7
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

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