a=10
b=20
res = (_("result is : %(first) , %(second)") %{'first' : a,'second' : b})
print res
Может ли кто-нибудь объяснить функциональность вышеуказанного кода?Пожалуйста, помогите мне понять этот код на Python
a=10
b=20
res = (_("result is : %(first) , %(second)") %{'first' : a,'second' : b})
print res
Может ли кто-нибудь объяснить функциональность вышеуказанного кода?Пожалуйста, помогите мне понять этот код на Python
_
обычно переопределение gettext
модуля, который представляет собой набор инструментов, который помогает переводить текст на многие языки: Как показано здесь:
import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')
http://docs.python.org/2/library/gettext.html
В противном случае, при использовании %(name)s
в строке, это строка форматирование. Это означает: «отформатируйте мою строку с помощью этого словаря». Словарем в этом случае является: {'first' : a,'second' : b}
Синтаксис вашей строки неверен, хотя в скобках отсутствует s
.
Ваш код в основном печатает: результат: 10, 20 Если исправить недостающее s
Для получения дополнительной информации вы можете прочитать: Python string formatting: % vs. .format
Этот код не работает:
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 10
>>> b = 20
>>> res = (_("result is : %(first) , %(second)") %{'first' : a,'second' : b})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
Но в противном случае это выглядит как простой текст форматирование, используя старый стиль форматирование с картами.
Вы сначала написать строку, содержащую аргументы, используя синтаксис %argument
, а затем вы даете ему карту, содержащую значение этого аргумента, используя следующий синтаксис:
"This is an argument : %argument " % {'argument' : "Argument's value" }
Старайтесь избегать этого и использовать format
вместо этого как это легче понять, более компактным и надежным:
"This is an argument : {} and this one is another argument : {} ".format(arg1, arg2)
Вы случайно иметь 'от GetText импорта что-то как _' где-то в вашем коде? –
Почему все это делают? Кажется, что законный вопрос – jamylak
@jamylak: потому что здесь слишком мало контекста, чтобы определить, что вопрос * о *. Это о вызове '_()' или о форматировании строки '' '% {} '? (Я не голосовал, но ОП не * объяснил, в чем проблема, действительно). –