Python, что делает подчеркивание перед скобкой
Просматривая некоторый код Django в формах аутентификации, я заметил следующий синтаксис
label=_("Username")
Обычно я бы просто использовал пару кавычек вокруг строки. Может ли кто-нибудь объяснить мне, что подчеркивают и скобки вокруг "Username"?
Ответы
Ответ 1
_
- имя вызываемого объекта (функция, вызываемого объекта). Он обычно используется для функции gettext
, например, в Django:
from django.utils.translation import ugettext as _
print _("Hello!") # Will print Hello! if the current language is English
# "Bonjour !" in French
# ¡Holà! in Spanish, etc.
Как говорится в документе:
Стандартная библиотека Pythons библиотеки gettext устанавливает _()
в глобальное пространство имен как псевдоним для gettext()
. В Django мы решили не следовать этой практике по двум причинам:
[...]
Символ подчеркивания (_
) используется для представления "предыдущего результата" в интерактивных тестах оболочки и доктринах Pythons. Установка глобальной функции _()
вызывает помехи. Явный импорт ugettext()
в качестве _()
устраняет эту проблему.
Даже если это соглашение, оно не может быть в в коде. Но будьте уверены, 99,9% времени _
является псевдонимом для gettext
:)
Ответ 2
Подчеркивание - это еще один объект Python, но по соглашению библиотека gettext
сканирует его, чтобы найти переводный текст.
Обычно он связан с ugettext
вызываемым:
from django.utils.translation import ugettext as _
См. главу перевода документации Django:
Стандартная библиотека Pythons библиотеки gettext устанавливает _()
в глобальное пространство имен как псевдоним для gettext()
. В Django мы решили не следовать этой практике по двум причинам:
- Для поддержки международного набора символов (Unicode)
ugettext()
более полезна, чем gettext()
. Иногда вы должны использовать ugettext_lazy()
как метод перевода по умолчанию для определенного файла. Без _()
в глобальном пространстве имен разработчик должен подумать о том, какая из них является наиболее подходящей функцией перевода. - Символ подчеркивания (
_
) используется для представления "предыдущего результата" в интерактивных тестах и тестах для Pythons. Установка глобальной функции _()
вызывает помехи. Явный импорт ugettext()
как _()
устраняет эту проблему.
Ответ 3
Он вызывает функцию _
с аргументом "Username"
, так же как f("Username")
вызывает функцию f
. Вероятно, _
является функцией интернационализации строк.