from MODULE import _" 在Python中有什么作用?

8 投票
2 回答
10568 浏览
提问于 2025-04-15 23:09

在“Getting things gnome”的代码中,我发现了这个导入语句

from GTG import _  

但是我完全不知道这是什么意思,文档里也没见过这个,快速搜索了一下也没有找到相关信息。

2 个回答

4

这段话的意思是,把函数、类或模块 _ 导入到当前的命名空间里。这样,你就不需要每次都输入 GTG._,只需要输入 _ 就能使用它了。

这里有一些文档可以参考:

http://docs.python.org/tutorial/modules.html#more-on-modules

需要注意的是,使用这个方法要小心。如果用得太多,可能会弄乱当前的命名空间,让代码变得难以阅读,甚至可能引发运行时错误。另外,绝对不要这样做:

from MODULE import *

因为这样会严重污染当前的命名空间。

这个技巧在你只需要用到模块中的一两个函数、类或模块时特别有用,因为这样只会导入你列出的那些内容。

比如说,如果我想使用 itertools 模块中的 imap 函数,而我知道我不需要其他的 itertools 函数,我可以这样写:

from itertools import imap

这样就只会导入 imap 函数。

正如我之前提到的,这个方法要谨慎使用,因为有些人可能会觉得

import itertools

# ... more code ...

new_list = itertools.imap(my_func, my_list)

from itertools import imap

# ... more code ...

new_list = imap(my_func, my_list)

更容易阅读,因为这样可以清楚地知道 imap 函数是来自哪个模块。

13

from GTG import _ 这行代码是从 GTG 模块中引入 _ 这个函数到“当前”的命名空间里。

通常情况下,_ 这个函数是 gettext.gettext() 的别名,也就是一个用来显示给定消息的本地化版本的函数。文档中会给出一个图示,说明在一个遥远的模块中通常会发生什么:

import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')

撰写回答