博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
local variable 'var1' referenced before assignment
阅读量:6850 次
发布时间:2019-06-26

本文共 618 字,大约阅读时间需要 2 分钟。

起初是群里一个哥们这句话报错。

后来之前的一个实习生,给出了链接来解释这个问题。 我竟然没看懂....

代码如下:

def foo1(tmp =None):    def foo():        if tmp:            print tmp        else :            tmp = None    return foo()

其实这个代码不能很好的反应问题。来看以下两个case

def foo1(var1 =None):    def foo():        var1 = 1 + 1        print var1    return foo()def foo3(tmp=None):    def foo():        c = tmp        tmp = 1 + 1    return foo()

我一开始没理解这个问题。看到assign variable 和access variable 粗略的理解成不能够在闭包函数中改变上层函数的变量。但... 根本不是这回事。

实际上是, 如果一个变量被赋值,那么python会认为其为局部变量。局部变量只会在当前函数空间来找到变量(就是foo函数内),所以可以看到,在foo3中,解析器看到tmp = 1+1 就认为 tmp 为局部变量,然后想起来之前好像用过tmp,c= tmp ,发现tmp 在这句之前没有被定义所以报错了。

转载地址:http://mdgul.baihongyu.com/

你可能感兴趣的文章
linux启动_grub
查看>>
MyBatis的常见属性总结select、insert、update、delete
查看>>
运行脚本下的 类tail -f sed -n
查看>>
[Python]学习基础篇:字典
查看>>
观察者模式
查看>>
Android WebView缓存机制详解
查看>>
Linux iptables命令高级网络
查看>>
STL中mem_fun和mem_fun_ref的用法
查看>>
Mysql管理总结
查看>>
Exchange2007的规划和安装
查看>>
同步时间
查看>>
去除TFS版本控制信息
查看>>
南海区妇幼保健院HIS数据容灾备份系统项目
查看>>
思科3560交换机端口限速
查看>>
linux网络设备无法启动问题处理
查看>>
生活大爆炸系列之磨望远镜
查看>>
文档:Windows Server 2012 配置Hyper-V复制
查看>>
正则表达式
查看>>
Angular企业级开发(1)-AngularJS简介
查看>>
如何查看自己电脑系统的安装日期-Window上
查看>>