【发布时间】:2019-08-18 20:14:05
【问题描述】:
我有一个关于变量作用域的快速问题,我之前一直在使用 c++,然后我最近开始使用 js 和 python,我注意到一些关于如何在函数内部使用变量的问题。
在 C++ 中,为了使用/修改全局变量,我需要将 if first 作为参数传递,用于打印或更改其值。
int increment(int);
int value = 0;
int main() {
cout << increment(value) << endl;
return 0;
}
int increment(int value) {
value += 1;
return value;
}
如果我碰巧定义了增量无参数/无参数(假设它将使用全局变量“值”),即
int increment() {
value += 1;
return value;
}
因此调用函数而不传递任何参数 cout << increment() << endl; ,它将给出一个未定义的变量,因为本地使用的变量没有被引入(传递)到函数范围,我完全理解并且看起来很对我来说合乎逻辑。
但是在js和python中使用全局变量而不首先将其传递给定义中的函数是完全可行的:
// Javascript : access and reassignment are viable
var total = 0
function call(){
total++ ;
return total ;
}
console.log(call()) // 1
# Python : only access is viable
value = 0
def inc():
return "The value is {}".format(value)
print(inc()) # The value is 0
我只是想知道为什么 python 允许函数只访问全局变量(甚至不事先将它们传递给这些函数)而不重新分配它们,这些全局变量和函数的定义在哪里?位于内存中?
【问题讨论】:
-
范围规则因语言而异。
-
"* 它会给出一个未定义的变量"*.按预期工作here。
标签: javascript python scope global