深入解析Python中的 builtins

2022-10-04 21:48:30 字數 1944 閱讀 5890

如果你已經學習了包,模組這些知識了。

你會不會有好奇: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操作符決定某個元素是否是乙個集合中的成員。集合等價 不等價 等價 不等價被用於在相同或不同的集合之間做比較。兩個集合相等是指,對每個集合而言,當且僅當其中乙個集合中的每個成員同...