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) 最终一定要把所有的faq.以索引的形式归拢到一个帖子里 wp231957 发表于 2020-3-4 13:02
最终一定要把所有的faq.以索引的形式归拢到一个帖子里
嗯嗯 这就是可变对象和不变对象的区别……{:10_256:}
页:
[1]