Python __builtin__模块

你有没有好奇过当咱们打开Python后就能够直接使用str(),list(),eval(),print(),max()这样的函数,而不用导入任何模块?python

其实缘由很简单,就是当咱们打开Python解释器以后,它会自动导入一些模块,因此咱们就能够直接使用不少函数,它们有一个名字,叫内建函数。函数

咱们能够利用dir()来查看被自动导入的模块都有哪些,咱们在一个空文件里打印dir():ui

里面有一个叫__builtins__的模块:3d

会看到咱们熟悉的内建函数的名称,如list、dict、str等,固然还有一些异常和其它属性。blog

打印__builtins__,会发现__builtins__实际上是引用了__builtin__模块而已,这说明真正的模块是__builtin__class

__builtins__与__builtin__的深刻区别:

他们俩的深刻区别主要要看是不是在主模块下进行的操做test

一、若是是在主模块下进行操做,那二者就没有区别

二、若是不是在主模块中进行操做,__builtins__就是对__builtin__.__dict__的一个引用

  先建立一个test.py模块,后面咱们须要在Python交互器中导入它,那么这时候对于test模块来讲,它就不是主模块了。以下:import

  test.py引用

import __builtin__

print 'Module name:', __name__

print '*==test __builtin__ and __builtins__==*'
print '__builtin__ == __builtins__', __builtin__ == __builtins__
print '__builtin__ is __builtins__', __builtin__ is __builtins__
print 'id(__builtin__)', id(__builtin__)
print 'id(__builtins__)', id(__builtins__)

print '=' * 50

print '*==test __builtin__.__dict__ and __builtins__==*'
print '__builtin__.__dict__ == __builtins__', __builtin__.__dict__ == __builtins__
print '__builtin__.__dict__ is __builtins__', __builtin__.__dict__ is __builtins__
print 'id(__builtin__)', id(__builtin__.__dict__)
print 'id(__builtins__)', id(__builtins__)

  

   从输出的结果能够看出__builtins__就是对__builtin__.__dict__的引用。im

相关文章
相关标签/搜索