这里为什么b还是等于100呢?求解答,多谢啦!

这里为什么b还是等于100呢?求解答,多谢啦!

你得去搞懂什么是值传递,什么是地址传递(又叫引用传递),这道题是值传递

你这是值传递,函数内是不能改变外部传递的对象的。实际这个函数参数b与你外部的b不是同一个存储地址,所以函数内部修改b值没有用

你应该将参数类型改为引用或指针 

这里你的函数内a,b是形参,其实可以改成x,y之类的,不会有影响。

所以在函数执行时,形参地址获得了实参a,b的值,然后进行运算,这个过程中实参a,b的值没变化,但形参计算了。

问题是函数结束后,形参的内存空间又被释放了,这样在形参中的值没有变化,只有函数的返回值到了实参的c

要使得b变化可以考虑函数的参数b改成b的地址,从而形参b的变化会同时改变实参b

你那个b是函数内部的参数,而你想修改外面的b,你要把他转变为全局变量,并不建议你的命名重复,尽量不要使用相同的变量名

def func(a):
    global b
    c = a**2+b
    b = a
    return c

a = 10
b = 100
c = func(a) + a
print(a,b,c)