鱼C论坛

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

[已解决]函数变量作用域问题求解答

[复制链接]
发表于 2016-7-22 21:43:39 | 显示全部楼层 |阅读模式

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

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

x
def outside():                         1
    var = 5                                2
    def inside():                        3
        print(var)                        4
        var = 3                        5
  
    inside()                        6
outside()                                7


对于上述函数:
第2行的var变量是函数outside()的局部变量
但是相对于函数inside()是全局变量(定义在函数外层)
为什么print(var)就会报错???
第4行的print(var)应该是可以引用var=5这个变量的把
然后第5行的var=3 只是把var重新赋值而已

我的理解是这样的

最佳答案
2016-7-22 22:45:08
def outside():
    var = 5
    def inside():
        print(var)
        #var=0
    inside()
   
f=outside()

------------------------------------------
这样就可以~
你在内层重新定义了var,覆盖了外层的var,
外层var 不能在 = 的左边,否则就是重新定义var
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-22 22:45:08 | 显示全部楼层    本楼为最佳答案   
def outside():
    var = 5
    def inside():
        print(var)
        #var=0
    inside()
   
f=outside()

------------------------------------------
这样就可以~
你在内层重新定义了var,覆盖了外层的var,
外层var 不能在 = 的左边,否则就是重新定义var
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-22 23:02:04 | 显示全部楼层
还是不明白,
print(var) 应该是可以读到外层函数的var的,因为外层函数中的局部变量,应该和内层函数处于同一个等级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-23 01:02:39 | 显示全部楼层
我查到的一个解释是:
在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有var的定义和赋值,所以报错。

在你这个例子中,内层函数对var做了修改,所以var是一个局部变量,然而你在对这个局部变量赋值之前就调用了print()函数,所以会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-23 14:49:01 | 显示全部楼层
如果这个是python特有的额 那应该理解你的意思了  因为在java里面这个是不应该有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 23:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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