鱼C论坛

 找回密码
 立即注册
查看: 2058|回复: 3

[已解决]关于自定义函数(小白问题)

[复制链接]
发表于 2022-7-1 21:00:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


i(2)
a
0

为什么会出现这种情况

最佳答案
2022-7-1 21:15:24

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

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

所以这里函数外部的 a 和 函数内部的 a 变量 不是同一个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 21:15:24 | 显示全部楼层    本楼为最佳答案   

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

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

所以这里函数外部的 a 和 函数内部的 a 变量 不是同一个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表