不同编程语言的副作用

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