hello? 发表于 2022-7-1 21:00:47

关于自定义函数(小白问题)

a=0
def i(x):
        a=x


i(2)
a
0

为什么会出现这种情况

临时号 发表于 2022-7-1 21:14:46

首先,a=0(注意:这里的a是全局变量,作用域是全局)
然后,你定义了i函数
然后,你调用了i函数,将2传了进去
在i函数中,x=2:
a=x,即a=2(注意:这里有赋值行为,所以这里的a是局部变量,作用域仅在i函数内)
然后,你输出了a,因为这里的a是全局变量,所以输出了全局变量a的值,即0

Twilight6 发表于 2022-7-1 21:15:24


函数外全局空间上的 a 属于全局变量,而函数内部重新赋值的 a 属于局部变量

在函数内部对 a 进行重新赋值时,会屏蔽外部的全局变量 a

所以这里函数外部的 a 和 函数内部的 a 变量 不是同一个变量

jackz007 发表于 2022-7-1 23:38:49

本帖最后由 jackz007 于 2022-7-1 23:45 编辑

       在函数内,全局变量为只读,是不可以被赋值的,如果对全局变量赋值,那么,从在本质上讲,就是另外定义了一个与全局变量同名的局部变量,但是,如果用 global 关键字先行声明,这种赋值行为就不再是新建同名局部变量了。
def i(x):
    global x
    a = x

a = 0
i(100)
print(a)
页: [1]
查看完整版本: 关于自定义函数(小白问题)