我对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被添加到全局符号表中?
谢谢你的帮助!
全局范围内的所有内容都可以从内部函数中看到以供阅读。事情一定是这样的:在 Python 中,指向变量的名称和指向函数的名称之间没有区别,因此如果这不起作用,您甚至无法调用函数。
但如果你想修改 x,你需要 global 关键字。
至于为什么在函数之后定义变量时它会起作用:Python不会在编译时尝试解析引用,而是在调用函数时尝试解析引用:因为Python中的所有内容都是动态的,所以无法提前告知是否定义了一个变量。