Python 的內(nèi)建對象

如果你已經(jīng)學(xué)習(xí)了包,模塊這些知識了逢防。
你會不會有好奇:Python為什么可以直接使用一些內(nèi)建函數(shù),不用顯式的導(dǎo)入它們蒲讯,比如 str() int() dir() ...忘朝?
原因是Python解釋器第一次啟動的時候 __builtins__ 就已經(jīng)在命名空間了(Note: 有s)

進(jìn)Shell看看:

>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 
'__name__': '__main__', '__doc__': None, '__package__': None}

<br />
你可以再次導(dǎo)入 __builtin__(Note: 沒有s):

import __builtin__
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 
'__name__': '__main__', '__doc__': None, '__builtin__': 
<module '__builtin__' (built-in)>, '__package__': None}

<br />
這時候多了一個 __builtin__ 對象,你可以判斷它們是不是相同的:

>>> __builtin__ is __builtins__
True
>>> type(__builtin__)
<type 'module'>
>>> type(__builtins__)
<type 'module'>

<br />
現(xiàn)在我們把它從一個文件導(dǎo)入:

# 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 __builtin__.__dict__", __builtins__ is __builtin__.__dict__


# file2.py
import file1

"""結(jié)果:
module name __name__ :  file
__builtin__ is __builtins__:  False
type(__builtin__):  <type 'module'>
type(__builtins__):  <type 'dict'>
__builtins__ is __builtin__.__dict__ True
"""

<br / >

結(jié)論:

__builtins__ 是對內(nèi)建模塊 __builtin__ 的引用判帮,并且有如下兩個方面差異:

在主模塊中局嘁,即沒有被其他文件導(dǎo)入。__builtins__是對 __builtin__ 本身的引用晦墙,兩者是相同的悦昵。

通過 __builtins__ is __builtin__.__dict__ 猜想:
在非 '__main__' 模塊中,也就是模塊被導(dǎo)入后偎痛,__builtins__ 應(yīng)該屬于 __builtin__.__dict__ 的一部分旱捧,是對 __builtin__.__dict__ 的引用,而非builtin本身踩麦,它在任何地方都可見枚赡,此時builtins的類型是字典。

<br / >

裝飾內(nèi)建函數(shù)

Python 官方文檔 解釋了如何裝飾一個內(nèi)建函數(shù):

import __builtin__

def open(path):
    f = __builtin__.open(path, 'r')
    return UpperCaser(f)

class UpperCaser:
    __metaclass__ = type
   
    def __init__(self, f):
        self._f = f

    def read(self):
        return self._f.read().upper()

print open('./a.txt').read()
# 將會全部轉(zhuǎn)為大寫輸出

<br />
Note:Python3.X版本中谓谦,內(nèi)建模塊更名為builtins贫橙,與Python2.X有所不同

<br />

參考:

Python所有內(nèi)建函數(shù)
__builtin__ 與 __builtins__ 的區(qū)別與關(guān)系
What's the deal with __builtins__ vs __builtin__

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市反粥,隨后出現(xiàn)的幾起案子卢肃,更是在濱河造成了極大的恐慌,老刑警劉巖才顿,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莫湘,死亡現(xiàn)場離奇詭異,居然都是意外死亡郑气,警方通過查閱死者的電腦和手機(jī)幅垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尾组,“玉大人忙芒,你說我怎么就攤上這事』淝龋” “怎么了呵萨?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跨跨。 經(jīng)常有香客問我潮峦,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任跑杭,我火速辦了婚禮铆帽,結(jié)果婚禮上咆耿,老公的妹妹穿的比我還像新娘德谅。我一直安慰自己,他們只是感情好萨螺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布窄做。 她就那樣靜靜地躺著,像睡著了一般慰技。 火紅的嫁衣襯著肌膚如雪椭盏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天吻商,我揣著相機(jī)與錄音掏颊,去河邊找鬼。 笑死艾帐,一個胖子當(dāng)著我的面吹牛乌叶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柒爸,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼准浴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捎稚?” 一聲冷哼從身側(cè)響起乐横,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎今野,沒想到半個月后葡公,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡条霜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年催什,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛔外。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛆楞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夹厌,到底是詐尸還是另有隱情豹爹,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布矛纹,位于F島的核電站臂聋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孩等,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一艾君、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肄方,春花似錦冰垄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隅要,卻和暖如春蝴罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背步清。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工要门, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廓啊。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓欢搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崖瞭。 傳聞我的和親對象是個殘疾皇子狂巢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • pypy支持的擴(kuò)展模塊(對應(yīng)Python/Modules/中的模塊) pypy支持的內(nèi)建模塊:__builtin_...
    JianMing閱讀 4,743評論 0 0
  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,680評論 0 5
  • 1.元類 1.1.1類也是對象 在大多數(shù)編程語言中书聚,類就是一組用來描述如何生成一個對象的代碼段唧领。在Python中這...
    TENG書閱讀 1,253評論 0 3
  • 一驯杜、迷你小說(三則) 隨機(jī)詞語:干部受啥,閱讀,下筆 坐在自己的辦公室里鸽心,他作為這次被檢查的干部滚局,萬分不安。他拿起手邊...
    余悅六六六閱讀 953評論 2 11
  • 我想說,抓住那只喵糯景! 想當(dāng)年嘁圈,在待拆遷的城中村撿了奶貓一只省骂,當(dāng)時這貨才巴掌大,坐在臟水坑里咪咪咪地向匆匆路人哭著要...
    東寫西讀邪大大閱讀 404評論 1 1