【问题标题】:Side effect in different programming language [closed]不同编程语言的副作用[关闭]
【发布时间】:2020-08-23 06:57:12
【问题描述】:

我正在研究不同编程语言的副作用

例如,在 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)时,我得到了错误“局部变量'x'在赋值之前引用。”

为什么对于相同的函数和执行,但使用不同的编程语言,我会得到不同的结果?与 C++ 相比,我在 Python 中会产生副作用吗?是因为编译了C++,解释了Python吗?

【问题讨论】:

  • Python 的副作用是什么?整数是不可变的,所以我看不出 Python 有什么相关性……
  • 不幸的是,“为什么我有不同的结果......在不同的编程语言中”的最佳答案可能是“因为不同的语言做事不同,否则只会有一种编程语言”跨度>
  • @roganjosh 与 c++ 相比,我在 python 中有副作用吗?
  • 请先花一点时间了解该错误消息的含义。你会发现你的程序是不等价的,这与副作用无关。作为新用户,也请带上tour阅读How to Ask
  • 相同的实现和执行不会有不同的结果。你有不同的实现和不同的执行。如果您刚学过语言,您会发现其中的不同。

标签: python c++ side-effects


【解决方案1】:

在 Python 中,如果要重新分配全局变量,则需要使用 global 关键字。在 C 中,您无需额外步骤即可访问它们。这个版本的 Python 函数应该可以正常工作:

正如@roganjosh 评论的那样,不建议使用全局变量(在任何一种语言中),但它们会使函数的行为符合您的预期。

产生差异的原因并不是因为编译了 C++ 而解释了 Python。这只是因为 Python 需要 global 关键字来重新分配全局变量,而 C++ 不需要。

def f(y):
    global x
    x = x + y
    return x

【讨论】:

  • 虽然这样可行,但很恶心,应该避免使用global。它可能会解决 OP 的问题,但这是不好的做法
  • c++ 也是一种不好的做法。
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多