请帮我理解这个python代码

时间:2013-04-08 09:20:52

标签: python python-2.7

a=10    
b=20    
res = (_("result is : %(first) , %(second)") %{'first' : a,'second' : b})    
print res

有人能解释一下上述代码的功能吗?

2 个答案:

答案 0 :(得分: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 :(得分: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)