从外部函数访问变量

jen*_*nsa 6 python

我对Python很新,但在C++方面有点经验,这就是为什么下面的代码示例让我感到困惑的原因.

def foo():
    y = x
    print y

x = 5
foo()
Run Code Online (Sandbox Code Playgroud)

运行此代码将打印值5.如何在foo()中知道变量x的值?上面的代码不会在C++中运行,如果我们这样做了会:

#include <iostream>

int x = 5;
void foo()
{
    std::cout << "x = " << x << std::endl;
}

int main()
{
    foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因为这里x是全局范围中的变量,它在foo()之前被声明(和定义).它是否在Python中工作,因为x被添加到全局符号表中?

谢谢你的帮助!

Dan*_*man 4

全局范围内的所有内容都可以从内部函数中看到以供阅读。事情一定是这样的:在 Python 中,指向变量的名称和指向函数的名称之间没有区别,因此如果这不起作用,您甚至无法调用函数。

但如果你想修改 x,你需要 global 关键字。

至于为什么在函数之后定义变量时它会起作用:Python不会在编译时尝试解析引用,而是在调用函数时尝试解析引用:因为Python中的所有内容都是动态的,所以无法提前告知是否定义了一个变量。