local variable 'var1' referenced before assignment

起初是群里一个哥们这句话报错。
后来之前的一个实习生,给出了链接来解释这个问题。 我竟然没看懂....

http://stackoverflow.com/questions/89347...

代码如下:

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 在这句之前没有被定义所以报错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值