Python的副作用

Inq*_*irl 6 python

我在Python文档阅读:文档

要求全局分配变量可防止意外副作用。

让我们把它放在代码中:

def double(n):
  global y 
  y = 2 * n # this turns global as we have state y explicitly global

y = 5 
double(y)
print y # outputs 10
Run Code Online (Sandbox Code Playgroud)

我想再次检查一下我的理解,如果上面的代码在全局y上有副作用,那么我认为这与文档中的声明矛盾,基本上,我认为要求为全局变量分配变量不能防止副作用。

如果我错了,请纠正我。

谢谢

dan*_*gom 5

要求全局分配变量提供了防止意外副作用的障碍。

当文档说 global提供了防止意外副作用的障碍时,这意味着它可以保护您免受由于名称别名而导致函数可能更改其外部作用域的情况。

下面是一个例子:

x = 5

def safedouble(x)
    x = 2 * x
    return x

def unsafedouble(x)
    global x
    x = 2 * x
    return x

print(x) # 5
print(safedouble(x)) # 10
print(x) # 5 The x inside of the function does not interfere with x outside =)
print(unsafedouble(x)) # 10
print(x) # 10 ... do we really want this to happen?!
Run Code Online (Sandbox Code Playgroud)

要求全局意味着函数只有在程序员明确要求时才会改变外部作用域。