鱼C论坛

 找回密码
 立即注册
查看: 2966|回复: 4

全局变量与局部变量的问题

[复制链接]
发表于 2016-3-23 16:32:22 | 显示全部楼层 |阅读模式
5鱼币
       小甲鱼老师说过:如果在函数内部试图去“修改”全局变量,那么python会自动创建一个新的局部变量代替,名字跟全局变量一模一样。
       第一个代码段是在函数内部给result重新赋值(也就相当于在函数内部对result做直接修改),那么在外部调用result的时候,result依然是空列表,这个正好符合上面的说法。
       但是在第二个代码段中,通过insert函数往result里面插入一个数(本质上仍然是在函数内部对result直接做修改),那么此时系统也应该创建一个跟result同名的局部变量,所以在外部调用result的时候,也应该是空列表啊!但为啥最终出来的是[10]?   
       难道我对小甲鱼老师说的“修改”二字的理解出现了偏差?求大神帮忙~~~~~
QQ图片20160323162840.png

最佳答案

查看完整内容

是的,赋值就是重新定义,而append,sort等都是在原变量上修改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-23 16:32:23 | 显示全部楼层
maoxingming 发表于 2016-3-23 16:51
也就是说,只有在重新定义的时候,Python才会创建一个与全局变量一模一样的局部变量?所以小甲鱼老师课程 ...

是的,赋值就是重新定义,而append,sort等都是在原变量上修改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-23 16:48:06 | 显示全部楼层
函数内部是可以“修改”可变类型的变量的,你可以在函数内外看看result的地址。而程序1是重新定义了一个result,所以不影响全局变量。
同样将程序1改为这样,也是“修改”了全局变量。
  1. >>> result = [1, 2]
  2. >>> def test():
  3.         result[0] = 3

  4.        
  5. >>> test()
  6. >>> result
  7. [3, 2]
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-23 16:51:55 | 显示全部楼层
冬雪雪冬 发表于 2016-3-23 16:48
函数内部是可以“修改”可变类型的变量的,你可以在函数内外看看result的地址。而程序1是重新定义了一个res ...

也就是说,只有在重新定义的时候,Python才会创建一个与全局变量一模一样的局部变量?所以小甲鱼老师课程上所说的“修改”,其实是指重新定义?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-23 17:00:46 | 显示全部楼层
冬雪雪冬 发表于 2016-3-23 16:54
是的,赋值就是重新定义,而append,sort等都是在原变量上修改

嗯嗯。明白了,非常感谢~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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