“定义”和“分配”之间有什么区别?

时间:2019-01-06 12:37:42

标签: python

我很困惑...

为什么它们有不同的错误?

还是喜欢JavaScript?

print(val1) #NameError: name 'val1' is not defined
val1 = 20


def foo1():
    print(val2)  # NameError: name 'val2' is not defined
foo1()


def foo2():
    print(val3)  # UnboundLocalError: local variable 'val3' referenced before assignment
    val3 = 20
foo2()

1 个答案:

答案 0 :(得分:0)

因为最后一个在函数范围内对值进行了赋值,而python在调用print之后检测到您对值进行了赋值。

在第二种情况下python找不到任何定义,并且在第一种情况下,因为您要在全局范围内将值分配给,因此它无法解析该值是否适用于先前的val(因为不在本地范围内。