代码之家  ›  专栏  ›  技术社区  ›  dimo414

Mercurial/Python—下划线函数的作用是什么?

  •  5
  • dimo414  · 技术社区  · 15 年前

     _('[OPTION] [QUEUE]')
    

    这使我很困惑,因为它似乎没有必要 Writing Extensions 指令没有提到它),而且类中似乎没有定义一个,所以我想知道这是不是一些我不理解的特殊语法,也许是另一种说法lambda,或者是identity函数?此外,我想知道这种方法(不管它是什么)比文档所建议的原始字符串有什么好处。

    我在Python文档中没有看到提到这样的函数,所以我不确定这到底是Python问题,还是一个反复无常的问题。

    下面是两个使用这种结构的示例(请看 cmdtable 字典(靠近文件底部)

    2 回复  |  直到 8 年前
        1
  •  8
  •   ptomato    15 年前

    from mercurial.i18n import _
    

    这是国际化包中常用的缩写 gettext ,可能还有其他包,用于将其参数转换为程序当前运行的语言的函数。缩写为 _ 为了方便起见,因为它几乎用于显示给用户的每一条消息。

    看起来Mercurial在他们自己的模块中封装了它“i18n”代表“国际化”,因为在“i”和“n”之间有18个字母

        2
  •  7
  •   Alex Martelli    15 年前

    _ (一个下划线的函数名)通常与国际化相关,这是因为 gettext the module's docs ,

    gettext.install(domain[, localedir[, unicode[, codeset[, names]]]])
    

    _() 在里面 Pythons内置名称空间,基于 传递给函数 翻译()。unicode标志是 传递到结果翻译 objects install()方法。

    翻译的描述 objects install()方法。

    如下图所示,您通常会标记 翻译候选人 _() 函数,如下所示:

    print _('This string will be translated.') 
    

    想要那个吗 _() 要安装的功能 在的所有模块中都很容易访问 你的申请。

    _

    _ 作为“我不在乎”的标识符,比如

    fee, fie, _, _, foo, _, fum = thesevenitemstuple
    

    当然,你最好不要在同一个代码中同时使用这两种传统;-)

    推荐文章