2013-04-08 3 views
0
a=10  
b=20  
res = (_("result is : %(first) , %(second)") %{'first' : a,'second' : b})  
print res 

Может ли кто-нибудь объяснить функциональность вышеуказанного кода?Пожалуйста, помогите мне понять этот код на Python

+7

Вы случайно иметь 'от GetText импорта что-то как _' где-то в вашем коде? –

+1

Почему все это делают? Кажется, что законный вопрос – jamylak

+4

@jamylak: потому что здесь слишком мало контекста, чтобы определить, что вопрос * о *. Это о вызове '_()' или о форматировании строки '' '% {} '? (Я не голосовал, но ОП не * объяснил, в чем проблема, действительно). –

ответ

4

_ обычно переопределение 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

1

Этот код не работает:

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)

Смежные вопросы