zg手冊 之 python2.7.7源碼分析(5)-- python的做用域和名空間

在 python 中, module,做用域,名空間這幾個概念與虛擬機的運行機制有緊密的聯繫,python

這裏先了解 module,做用域,和名空間,爲後面分析虛擬機的運行作準備。python2.7


module

在python中一個文件對應是一個module,每一個py文件被導入後都對應一個module對象。函數

這個對象包含有一個dict對象,保存着本py文件中對應的變量和函數的引用,源碼分析

也保存從其餘python文件(module)導入的變量或函數的引用。ui


名空間和做用域

python 有三個獨立的名空間, local, global, builtin。spa

  1. builtin 是python解釋器的全局名空間code

  2. global 是module對象的全局名空間,保存着module中的變量和函數的引用對象

  3. 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


總結

  1. 代碼塊對應着做用域和名空間

  2. 名空間保存有做用域內的變量和函數引用

  3. 每一個代碼塊對應着pyc字節碼文件的一個PyCodeObject對象(見 zg手冊 之 python2.7.7源碼分析(4)-- pyc字節碼文件


理解了上面的概念後,就能夠深刻理解虛擬機的運行原理了。


原文連接:zg手冊 之 python2.7.7源碼分析(5)-- python的做用域和名空間

相關文章
相關標籤/搜索