代码改变世界

Python 内建模块

2013-04-15 12:49  hatry  阅读(826)  评论(0)    收藏  举报

1.内建模块:

      在Python中,有一个内建模块,该模块中有一些常用函数;而该模块在Python启动后、且没有执行程序员所写的任何代码前,Python会首先加载该内建函数到内存。另外,该内建模块中的功能可以直接使用,不用在其前添加内建模块前缀,其原因是对函数、变量、类等标识符的查找是按LE(N)GB法则,其中B即代表内建模块。比如:内建模块中有一个abs()函数,其功能是计算一个数的绝对值,如abs(-20)将返回20。

2.在Python2.X版本中,内建模块被命名为__builtin__,而到了Python3.X版本中,却更名为builtins。

3.

     当使用内建模块中函数或其它功能时,可以直接使用,不用添加内建模块的名字;但是,如果想要向内建模块中添加一些功能,以便在任何函数中都能直接使用而不用再进行import,这时,就要导入内建模块,在内建模块的命名空间(即__dict__字典属性)中添加该功能。在导入时,如果是Python2.X版本,就要导入__builtin__模块;如果是Python3.X版本,就要导入builtins模块。如:在Python2.X中,向内建模块添加一个函数(该函数打印“hello, world”),可以这样写(以下的用法是在主模块中的使用,其它模块请看下面):

import __builtin__

def print_hello():

print "hello, world"

__builtin__.__dict__['hello'] = print_hello

print_hello() # 将打印"hello, world"

hello() # 将打印"hello, world"

此时,print_hello和hello两个函数名几乎是一样,但是有一点区别,print_hello只能在该模块中使用,而hello可以在本程序中的其它任何一个模块中使用,因为hello已经放到内建模块中了。

4.

       __builtins__,它却同时存在于Python2.X和Python3.X中。那么它到底是什么东西呢?由名字可知,它肯定与内建模块有关。其实简单地说,它就是对内建模块一个引用

(1)  __builtins__在任何地方、任何模块都可见,而内建模块名只在相应的作用域中被import后才可以(该import并不是把内建模块加载到内存中——内建早已经被加载了,它仅仅是让内建模块名在该作用域中可见)。

(2)  

1】 在主模块__main__中:

__builtins__是对内建模块__builtin__本身的引用,即__builtins__完全等价于__builtin__,二者完全是一个东西,不分彼此。它在任何地方都可见,即在任何地方都可使用它。此时,__builtins__的类型是模块类型。

__builtin__仅仅在导入它时才可见。哪个作用域中使用__builtin__,哪个作用域就要导入它(导入仅仅是让__builitin__标识符在该作用域内可见)。一般都是在模块的顶层(即模块的全局作用域)导入__builtin__,这样,其后的任何作用域可通过标识符向上查找来引用__builtin__。

2】在非__main__模块中:

__builtins__仅是对__builtin__.__dict__的引用,而非__builtin__本身。它在任何地方都可见。此时__builtins__的类型是字典。

 

参考资料:http://www.52ij.com/jishu/665.html