zltzlt 发表于 2020-3-4 12:34:22

Python FAQ 012 全局变量为什么能在函数中改变

Python FAQ 012 全局变量为什么能在函数中改变

问题

不是说不能在函数中改变全局变量吗,为什么下面这段代码可以在函数中改变 result 的值,而且没有 global result ?

result = []


def get_digit(n):
    if n > 0:
      result.insert(0, n % 10)
      get_digit(n // 10)


get_digit(12345)
print(result)

答案

虽然不能直接在函数中使用赋值运算符 = 、+= 等等改变全局变量的值,但是可以通过全局变量的方法改变全局变量的值。

在上面的代码中,只是调用 result 的 insert() 方法改变 result 的值,并没有使用赋值运算符。

所以这样也是可以的。

相反,如果是下面这段代码运行时就会报错了:

result = []


def get_digit(n):
    if n > 0:
      result = + result    # 报错位置,原因是这里使用了 = 赋值运算符改变了 result 的值
      get_digit(n // 10)


get_digit(12345)
print(result)

这时就该用 global result 告诉 Python 你想用赋值运算符改变 result 的值了:

result = []


def get_digit(n):
    global result
    if n > 0:
      result = + result
      get_digit(n // 10)


get_digit(12345)
print(result)

wp231957 发表于 2020-3-4 13:02:22

最终一定要把所有的faq.以索引的形式归拢到一个帖子里

zltzlt 发表于 2020-3-4 13:03:25

wp231957 发表于 2020-3-4 13:02
最终一定要把所有的faq.以索引的形式归拢到一个帖子里

嗯嗯

TCY 发表于 2020-3-19 15:35:24

这就是可变对象和不变对象的区别……{:10_256:}
页: [1]
查看完整版本: Python FAQ 012 全局变量为什么能在函数中改变