Python __builtin__模塊


你有沒有好奇過當我們打開Python后就可以直接使用str(),list(),eval(),print(),max()這樣的函數,而不用導入任何模塊?

其實原因很簡單,就是當我們打開Python解釋器之后,它會自動導入一些模塊,所以我們就可以直接使用很多函數,它們有一個名字,叫內建函數。

我們可以利用dir()來查看被自動導入的模塊都有哪些,我們在一個空文件里打印dir():

里面有一個叫__builtins__的模塊:

會看到我們熟悉的內建函數的名稱,如list、dict、str等,當然還有一些異常和其它屬性。

打印__builtins__,會發現__builtins__其實是引用了__builtin__模塊而已,這說明真正的模塊是__builtin__

__builtins__與__builtin__的深入區別:

他們倆的深入區別主要要看是否是在主模塊下進行的操作

1、如果是在主模塊下進行操作,那兩者就沒有區別

2、如果不是在主模塊中進行操作,__builtins__就是對__builtin__.__dict__的一個引用

  先創建一個test.py模塊,后面我們需要在Python交互器中導入它,那么這時候對於test模塊來說,它就不是主模塊了。如下:

  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__的引用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM