鱼C论坛

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

请教一个菜鸟问题,谢谢!

[复制链接]
发表于 2014-5-9 02:18:48 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 dangogo 于 2014-5-9 02:40 编辑

今天学习到20课时时,发现
var1 = [10]
def Fun1():
        print(var1)

Fun1()

这样是OK的,但是以下就不行。
def Fun1():
        print(var1)
        var1 = [20]
        print(var1)

Fun1()
UnboundLocalError: local variable 'var1' referenced before assignment

加上global var1就可以了。求教下为什么?课程中说容器变量不受影响,有些不解,请高手教下。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-9 08:28:19 | 显示全部楼层
改成这样试试
var1 = [10]

def Fun1(var1):
        print(var1)
        var1 = [20]
        print(var1)

Fun1(var1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-9 09:54:49 | 显示全部楼层
    Python中的变量再被引用之前必须先赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-9 18:31:15 | 显示全部楼层
楼上说得对。

加上global var1可以是大概是因为你是在shell里面执行的,之前你已经给过var1赋过值了,所以在def里调用的是全局变量里的var1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-9 19:25:45 | 显示全部楼层
虽然不知道是什么语言,但表示看得懂,前面没有 var1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-9 21:03:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-9 21:04:36 | 显示全部楼层
sidfate 发表于 2014-5-9 09:54
Python中的变量再被引用之前必须先赋值

因为是在shell里执行的,所以之前已经赋值过了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-9 21:05:26 | 显示全部楼层
宁录 发表于 2014-5-9 18:31
楼上说得对。

加上global var1可以是大概是因为你是在shell里面执行的,之前你已经给过var1赋过值了,所 ...

谢谢回复,疑问就是前面已经赋值过了。为什么会说没有赋值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-9 22:14:00 | 显示全部楼层
dangogo 发表于 2014-5-9 21:05
谢谢回复,疑问就是前面已经赋值过了。为什么会说没有赋值?

是这样的,def 里面称为局部变量,def外面的是全局变量,局部变量和全局变量即使名字一样也是两个不同的变量,局部变量只在该def中起作用。加上global 就是在局部变量里声明 这里的 var1 用的是全局变量。但是龟老师不提倡这个做法。请复习19课《我的地盘听我的》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-10 00:25:08 | 显示全部楼层
宁录 发表于 2014-5-9 22:14
是这样的,def 里面称为局部变量,def外面的是全局变量,局部变量和全局变量即使名字一样也是两个不同的变 ...

当在函数内部重新赋值给var1时,之后的print是否可以成功回显?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-10 01:06:51 | 显示全部楼层
见识一下   认真学习滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-10 07:26:33 | 显示全部楼层
dangogo 发表于 2014-5-10 00:25
当在函数内部重新赋值给var1时,之后的print是否可以成功回显?

用golbal  在def里修改的就是全局变量。其实只要在shell里试一下清楚了,程序是不会错的,错的只是人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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