在 python 中, module,做用域,名空間這幾個概念與虛擬機的運行機制有緊密的聯繫,python
這裏先了解 module,做用域,和名空間,爲後面分析虛擬機的運行作準備。python2.7
在python中一個文件對應是一個module,每一個py文件被導入後都對應一個module對象。函數
這個對象包含有一個dict對象,保存着本py文件中對應的變量和函數的引用,源碼分析
也保存從其餘python文件(module)導入的變量或函數的引用。ui
python 有三個獨立的名空間, local, global, builtin。spa
builtin 是python解釋器的全局名空間code
global 是module對象的全局名空間,保存着module中的變量和函數的引用對象
local 對應是當前代碼塊的名空間,保存局部的變量和函數引用blog
在python文件中,每一個代碼塊對應一個做用域,也對應一個名空間。utf-8
當使用變量或者函數的時候,按照名空間 local,global,builtin的順序查找。
代碼塊是能夠嵌套的,因此local名空間也是嵌套查找。
#!/usr/bin/env python # coding: utf-8 # test.py # 全局做用域,定義變量a,函數show a = 'hello word' def show(): # 函數 show 的局部做用域 name = 'show function' def myhelp(): # 函數 myhelp 的局部做用域 # 使用全局做用域的變量a print a # 使用 show 函數的局部做用域內的變量name print name
代碼塊對應着做用域和名空間
名空間保存有做用域內的變量和函數引用
每一個代碼塊對應着pyc字節碼文件的一個PyCodeObject對象(見 zg手冊 之 python2.7.7源碼分析(4)-- pyc字節碼文件 )
理解了上面的概念後,就能夠深刻理解虛擬機的運行原理了。