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中的进口的东西作为_'在你的代码中的某个地方? – 2013-04-08 09:23:42
为什么每个人都这样?这似乎是一个合法的问题 – jamylak 2013-04-08 09:26:43
@jamylak:因为这里没有足够的上下文来确定什么是*关于*的问题。是关于'_()'调用还是关于'''%{}'字符串格式? (我没有投票,但是OP没有*真正解释了问题所在)。 – 2013-04-08 09:28:04