鱼C论坛

 找回密码
 立即注册
查看: 1310|回复: 5

[已解决]求助一个全局变量的问题

[复制链接]
发表于 2020-12-28 01:11:42 | 显示全部楼层 |阅读模式

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

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

x
ls = ['F', 'f']

def fun(a):
    ls = []
    ls.append(a)
    return

fun('C')
print(ls)

请教一下这种情况为什么这个程序不会报错呢,不是属于函数内部修改了全局变量然后出现UnboundLocalError吗?是不是和ls是列表性质有关?
最佳答案
2020-12-28 02:00:05
本帖最后由 jackz007 于 2020-12-28 02:03 编辑

       全局变量在函数内不用 global 关键字进行声明就不能更改,指的应该是不能用等号赋值,像列表、字典、集合等属于可变对象,可以通过对象的方法进行修改,这种修改并没有直接用等号进行赋值,所以,是被允许的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-28 01:27:07 | 显示全部楼层
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,所以局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 02:00:05 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-28 02:03 编辑

       全局变量在函数内不用 global 关键字进行声明就不能更改,指的应该是不能用等号赋值,像列表、字典、集合等属于可变对象,可以通过对象的方法进行修改,这种修改并没有直接用等号进行赋值,所以,是被允许的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 08:59:32 | 显示全部楼层
不会报错呀,这相当于你在函数定义了一个ls的局部变量,函数执行完就被释放了。作用域只有在函数内,所以它跟外面的ls是两个东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 09:11:15 | 显示全部楼层
你有赋值语句,就说明你已经声明了,出现UnboundLocalError这个错误是说你没有赋值就用比如  a += 1,这时候需要先给a赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 09:43:33 | 显示全部楼层
函数内直接用=赋值一个变量时相当于申明了一个局部变量,跟函数外是隔离的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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