Python: 局部变量的作用域

来源:岁月联盟 编辑:exp 时间:2011-04-28

我们知道下面这段 C 代码肯定是行不通的。

void test(bool x)
{
    if (x)
    {
        int a = 1234;
    }

    printf("%d", a);
}
编译会出现 "error: ‘a’ undeclared (first use in this function)" 错误。

但在 Python 中是可行的。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def test(x):
    if x:
        a = 1234
        print hex(id(a)), locals()

    print hex(id(a)), locals(), a

test(True)
执行:
$ ./main.py

0x100253268 {a: 1234, x: True}
0x100253268 {a: 1234, x: True} 1234
也就是说整个函数内部都是通过一个字典(locals)来维持环境的。

-------

Python 2.6.5, Mac OSX 10.6

图片内容