鱼C论坛

 找回密码
 立即注册
查看: 2555|回复: 11

Python小问题,求救

[复制链接]
发表于 2015-9-30 16:16:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ~风介~ 于 2015-9-30 16:26 编辑

问个简单问题:
  1. def outside():
  2.     var = 5
  3.     def inside():
  4.         var = 3
  5.         print(var)      
  6.     inside()
  7. outside()
复制代码

===================
  1. def outside():
  2.     var = 5
  3.     def inside():
  4.         print(var)
  5.         var = 3      
  6.     inside()
  7. outside()
复制代码


/为什么第二个会报错呢,在内部函数里面,print的是5,inside里面,我只是把var给赋值,应该不影响外部函数吧

我想不通啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-9-30 17:01:49 | 显示全部楼层
~风介~ 发表于 2015-9-30 16:58
这样可以访问, 不可以改变~

哦。我懂了,应该就是我上面说的那个意思吧,访问了个不可改变的外部变量var,内部就不能改变他,除非用nonlocal。感谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-30 16:29:22 | 显示全部楼层
>>>
Traceback (most recent call last):
  File "C:/Python34/tmp.py", line 7, in <module>
    outside()
  File "C:/Python34/tmp.py", line 6, in outside
    inside()
  File "C:/Python34/tmp.py", line 4, in inside
    print(var)
UnboundLocalError: local variable 'var' referenced before assignment
>>>
报错信息显示, 赋值前引用!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-30 16:34:08 | 显示全部楼层
  1. def outside():# outside()函数里面的局部变量
  2.     var = 5
  3.     def inside():# inside()函数里面的局部变量
  4.         print(var)# 无法访问outside()函数的局部变量
  5.         var = 3
  6.     inside()
  7. outside()
复制代码

一个函数的局部变量是私有的, 其它无法访问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-30 16:36:10 | 显示全部楼层
~风介~ 发表于 2015-9-30 16:29
>>>
Traceback (most recent call last):
  File "C:/Python34/tmp.py", line 7, in

def outside():
    var = 5
    def inside():
        print(var)
        var = 3      
    inside()
outside()

def outside():
    var = 5
    def inside():
        print(var)  
    inside()
outside()

这样就行了吗?我还是没懂啊。。赋值前引用,意思是我引用了,但是没有赋值??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-30 16:36:49 | 显示全部楼层
  1. def outside():
  2.     var = 5
  3.     def inside():
  4.         nonlocal var #用来在局部作用域使用来修改外层作用域(非全局)变量
  5.         print(var)
  6.         var = 3
  7.         print(var)
  8.     inside()
  9. outside()
复制代码

-
  1. >>>
  2. 5
  3. 3
  4. >>>
复制代码

如果需要访问则需要nonlocal!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-30 16:48:23 | 显示全部楼层
~风介~ 发表于 2015-9-30 16:36
-

如果需要访问则需要nonlocal!

哥,我的问题在这里啊,我理解代码是按照顺序执行的吧
先执行:print(var)  #这个时候,var应该是外部函数里面定义的那个值,5,那就打印5啊
再执行:var=3  #这个地方跟上面没关系吧。。。

还是说,是这个意思,我print(var),这个地方使用的外部函数的var,那么下面语句中var就是外部变量,而我现在又想去修改他,是不可以修改的?

但是我一开始要是,就给他赋值var=3,他只是把外部给屏蔽,相当于内部生成了个var变量是3,是这个意思吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-30 16:50:24 | 显示全部楼层
大不了从头再来 发表于 2015-9-30 16:48
哥,我的问题在这里啊,我理解代码是按照顺序执行的吧
先执行:print(var)  #这个时候,var应该是外部 ...

先执行:print(var)  #这个时候,var应该是外部函数里面定义的那个值,5,那就打印5啊 ——> 访问不到,除非使用nonlocal.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-30 16:56:11 | 显示全部楼层
~风介~ 发表于 2015-9-30 16:50
先执行:print(var)  #这个时候,var应该是外部函数里面定义的那个值,5,那就打印5啊 ——> 访问不到 ...

def outside():
    var = 5
    def inside():
        print(var)   
    inside()
outside()

这样不是也可以啊,为什么我不能像你们一样理解呢,我也问了别人,意思大概和你差不多
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-30 16:58:55 | 显示全部楼层
大不了从头再来 发表于 2015-9-30 16:56
def outside():
    var = 5
    def inside():

这样可以访问, 不可以改变~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-30 17:02:22 | 显示全部楼层
~风介~ 发表于 2015-9-30 16:58
这样可以访问, 不可以改变~

靠,原来是版主大人啊,失敬失敬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2016-1-22 08:36:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-17 19:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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