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. Вероятно, _ является функцией интернационализации строк.