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的做用域和名空间

相关文章
相关标签/搜索