不同编程语言的副作用
Side effect in different programming language
我正在研究不同编程语言的副作用。
例如,在 C++ 中,如果我定义
x = 1;
int f(int y)
{
x = x + y;
return x;
}
并执行f(1)
x
的新值等于2。
在python中,我肯定可以执行定义相同的函数
x = 1
def f(y):
x = x + y
return x
但是当我在那种情况下执行f(1)
时,我得到了错误"local variable 'x' referenced before assignment."
为什么相同的功能和执行,但在不同的编程语言中却有不同的结果?与 C++ 相比,我在 Python 中会有副作用吗?是不是因为C++是编译的,Python是解释的?
在Python中,如果要重新分配全局变量,需要使用global
关键字。在 C 中,您可以直接访问它们而无需额外的步骤。这个版本的 Python 函数应该可以正常工作:
正如@roganjosh 评论的那样,不推荐使用全局变量(在任何一种语言中),但它们会使函数按照您的预期运行。
差异的原因不是因为C++是编译的而Python是解释的。很简单,因为 Python 需要 global
关键字来重新分配全局变量,而 C++ 不需要。
def f(y):
global x
x = x + y
return x
我正在研究不同编程语言的副作用。
例如,在 C++ 中,如果我定义
x = 1;
int f(int y)
{
x = x + y;
return x;
}
并执行f(1)
x
的新值等于2。
在python中,我肯定可以执行定义相同的函数
x = 1
def f(y):
x = x + y
return x
但是当我在那种情况下执行f(1)
时,我得到了错误"local variable 'x' referenced before assignment."
为什么相同的功能和执行,但在不同的编程语言中却有不同的结果?与 C++ 相比,我在 Python 中会有副作用吗?是不是因为C++是编译的,Python是解释的?
在Python中,如果要重新分配全局变量,需要使用global
关键字。在 C 中,您可以直接访问它们而无需额外的步骤。这个版本的 Python 函数应该可以正常工作:
正如@roganjosh 评论的那样,不推荐使用全局变量(在任何一种语言中),但它们会使函数按照您的预期运行。
差异的原因不是因为C++是编译的而Python是解释的。很简单,因为 Python 需要 global
关键字来重新分配全局变量,而 C++ 不需要。
def f(y):
global x
x = x + y
return x