如果你已經學習了包,模組這些知識了。
你會不會有好奇:python為什麼可以直接使用一些內建函式,不用顯式的匯入它們,比如 str() int() dir() ...?
原因是python直譯器第一次啟動的時候 __builtins__ 就已經在命名空間了(note: 有s)
進shell看看:
>>> globals()
你可以再次匯入 __builtin__(note: 沒有s):
import __builtin__
>>> globals()
這時候多了乙個 __builtin__ 物件,你可以判斷它們是不是相同的:
>>> __builtin__ is __builtins__
true
>>> type(__builtin__)
>>> type(__builtwww.cppcns.comins__)
現在我們把它從乙個檔案匯入:
# file1.py
import __builtin__
print "module name __name__ : ", __name__
print "__builtin__ is __builtins__: ", __builtin__ is __builtins__
print "type(__builtin__): ", type(__builtin__)
print "type(__builtins__): ", type(__builtins__)
print "__builtins__ is __built", __builtins__ is __builtin__.__dict__
# file2.py
import file1
"""結果:
module name __name__ www.cppcns.com: file
__builtin__ is __builtins__: false
type(__builtin__):
type(__builtins__):
__builtins__ is __builtin__.__dict__ true
"""結論:
__builtins__ 是對內建模組 __builtin__ 的引用,並且有如下兩個方面差異:
在主模組中,即沒有被其他檔案匯入。__builtins__是對 __builtin__ 本身的引用,兩者是相同的。
通過 __builtins__ is __builtin__.__dict__ 猜想:
在非 '__main__' 模組中,也就是模組被匯入後,__builtins__ 應該屬於 __builtin__.__dict__ 的一部分,是對 __builtin__.__dict__ 的引用,而非builtin本身,它在任何地方都可見,此時builtins的型別是字典。
裝飾內建函式
python 官方文件 解釋了如何裝飾乙個內建函式:
import __builtin__
def open(path):
f = __builtin__.open(path, 'r')
return uppercaser(f)
class uppercaser:
__metaclass__ = type
def __init__(self,www.cppcns.com f):
self._f = f
def read(self):
return self._f.read().upper()
print open('./a.txt').read()
# 將會全部轉為大寫輸出
note:python3.x版本中,內建模組更名為builtins,與python2.x有所不同
本文標題: 深入解析python中的__builtins__內建物件
本文位址: /jiaoben/python/154076.html
深入解析Python程式設計中JSON模組的使用
json編碼支援的基本資料型別為 none bool int float 和 str 以及包含這些型別資料的lists,tuples和dictionaries。對於dictionaries,keys需要是字串型別 字典中任何非字串型別的key在編碼時會先轉換為字串 為了遵循json規範,你應該只編碼...
深入解析python中的例項方法 類方法和靜態方法
1 例項方法 物件方法 例項方法或者叫物件方法,指的是我們在類中定義的普通方法。只有例項化物件之後才可以使用的方法,該方法的第乙個形參接收的一定是物件本身 2www.cppcns.com 靜態方法 1 格式 在方法上面新增 www.cppcns.com staticmethod 2 引數 靜態方法可...
深入解析Python中的集合型別操作符
1 標準型別操作符程式設計客棧 所有的集合型別 成員關係 in,not in 就序列而言,python中的in和not in操作符決定某個元素是否是乙個集合中的成員。集合等價 不等價 等價 不等價被用於在相同或不同的集合之間做比較。兩個集合相等是指,對每個集合而言,當且僅當其中乙個集合中的每個成員同...