开发,设计,生活

编程语言

  • 2014-10-19 07:29:03 2014-10-19 09:18:10[U] 编程语言

    在 python 中, module,作用域,名空间这几个概念与虚拟机的运行机制有紧密的联系,

    这里先了解 module,作用域,和名空间,为后面分析虚拟机的运行做准备。


    module

    在python中一个文件对应是一个module,每个py文件被导入后都对应一个module对象。

    这个对象包含有一个dict对象,保存着本py文件中对应的变量和函数的引用,

    也保存从其他python文件(module)导入的变量或函数的引用。


    名空间和作用域

    python 有三个独立的名空间, local, global, builtin。

    1. builtin 是python解释器的全局名空间
    2. global 是module对象的全局名空间,保存着module中的变量和函数的引用
    3. local 对应是当前代码块的名空间,保存局部的变量和函数引用


    在python文件中,每个代码块对应一个作用域,也对应一个名空间。

    当使用变量或者函数的时候,按照名空间 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字节码文件


    理解了上面的概念后,就可以深入理解虚拟机的运行原理了。