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

相關文章
相關標籤/搜索