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

上記のコードの機能を説明できる人はいますか?

4

2 に答える 2

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ます。括弧の後にがありません。

あなたのコードは基本的に次のように表示されます: result is : 10 , 20s

詳細については、これを読むことができます: Python 文字列フォーマット: % vs. .format

于 2013-04-08T09:28:41.253 に答える
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)

于 2013-04-08T09:28:24.840 に答える