函数
函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一个可变类型的容器,在函数中修改了容器中的元素,则该修改会影响到调用方的数据;请问这句话怎么理解?找半天没找到相关例子。
这个例子可以理解不:
def func(ls):
for i in range(len(ls)):
ls = i# 对应位置重新赋值,改变容器内的值
temp =
func(temp)
print(temp)# 打印发现 全局变量的 temp 列表也发生了改变
这里再举个例子,当传入的不是容器类型的值的时候:
def func(ls):
for i in range(100):
ls += i# 对传入的参数进行改变
temp = 5
func(temp)
print(temp) # 打印发现,结果还是 5
本帖最后由 heidern0612 于 2020-7-7 14:29 编辑
关键是这个可变类型的容器,一般情况下,可变类型的容器指的就是列表、字典一类包含数据段的容器。
这种容器本身占一个堆位,内容同样也占一个堆位。
在你定义函数的时候,如果你修改了容器元素,它的索引是会随着你函数调用变动而变动的。
也就是说,你修改可变类型容器,即使它在函数内部只是个局部变量,因为它索引的栈位不变,其实还是相当于修改了它自己。
上面说的有点迷糊,一般情况下,可变类型容器在实际应用中不存在什么局部变量、全局变量,只要是修改了它索引的栈区,那就所有指向同一栈区的内容都会跟着变化。
这种在实际应用上,可以参考一个全局变量的变化,比如说装饰器验证登录状态,一般可以用这种列表去做。
页:
[1]