鱼C论坛

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

[已解决]对于全局变量的疑问

[复制链接]
发表于 2020-8-7 11:02:36 | 显示全部楼层 |阅读模式

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

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

x
为什么下面这串代码的结果是[1],我理解的是对于change_result函数来说result是全局变量,按道理change_result函数不能对result做出修改,可结果是我明显是理解错了,求大佬解答
result=[]
def change_result():
        result.insert(0,1)
        print(result)
change_result()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-7 11:03:19 | 显示全部楼层    本楼为最佳答案   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 11:07:02 | 显示全部楼层
列表,字典,集合等数据类型是没有作用域滴!
你在哪里都可以修改它们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-8-7 11:13:03 | 显示全部楼层
全局变量和局部变量你没有好好搞懂:
局部变量是在函数,类中调用的变量,在外边修改不了(但可以访问)
全局变量是在整个程序中,在所有的地方都可以调用(新版要先写global 全局变量,没写会警告,但没啥事)
所以全局变量是可以在函数里调用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 11:16:05 | 显示全部楼层
可以看看我这个帖子的第四部分 global 与 nonlocal 使用的一个细节分析
为什么在函数中使用全局变量的时候,有时候需要使用关键字 global,而有时候则不需要关键字 global 呢?
python 编程语言,尽量的避免复杂化
像 int 、 float 、 str 等类型是一类不可变类型,所谓不可变类型,就是定义即赋值,修改实际上是新的定义,这一类变量的定义和修改都是使用赋值运算符 '='。
像 list 、 set 、 dict 等类型是一类可变类型,所谓可变类型,就是定义之后,还可以对变量进行修改,修改前后,该变量的 id 不变,这一类变量定义使用赋值运算符,修改则需要下标(或键),还可以有插入、删除等操作。
对于不可变类型的变量,若是在函数内部进行修改的话,会有歧义,无法识别到底是修改同名的全局变量,还是定义一个同名的局部变量(因为修改和定义方式是一样的)。因此在函数内若使用不可变类型的全局变量时需要使用 global 进行明确指出。
对于可变类型,则不存在这种歧义,若是在函数内部修改一个与全局变量同名的变量,不会被认为是要创建一个同名的局部变量(因为修改和定义方式是不一样的),当在函数内没有定义一个与全局变量同名的局部变量,那么修改一个同名的变量时,能够明确就是修改全局变量。因此在函数内若使用一个可变类型的全局变量时不需要使用 global 明确指出。


关于全局变量和局部变量。可以详细看看完整的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 14:00:38 | 显示全部楼层
重新看下视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 14:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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