Python变量scope正确理解含义是什么,pythonscope,globe = 10de


globe = 10def rdOnly():    print globe    big = 50    def rdInner():        print globe        print big    rdInner()rdOnly()def wrOnly():    global globe    print globe    globe = 100    print globe    big = 50    def wrInner():        global globe        print globe        globe = 200        print globe        print big        big = 500        print big    wrInner()wrOnly()

这段代码中, 只读代码始终不会出错, 但是一旦对上层变量赋值或修改, 就会报错, 全局变量可以通过在每一层声明其变量全局性解决, 上层函数的局部变量就没有办法处理了?

求问这种问题如何解决, 以及为什么会发生这种问题, 内在机理是什么?即为什么只读时引用上层变量不会保存, 而修改时就会出现reference before define的问题?

python在执行函数之前,会预先处理函数。在这个过程中,会判断函数里的变量是局部变量,还是全局变量。如果出现赋值语句,比如globe = 200,它就认为globe是这个函数里的局部变量(前提是没有global globe),而不管这个语句出现在哪个位置,之后执行函数时,如果对globe 的操作出现在赋值语句之前,它会认为你这个局部变量还没有定义就开始使用,所以会出现reference before define的问题。而如果没有赋值语句时,它就会认为这个变量的定义不在这个函数里面,之后一切按闭包处理,在你这个例子里,它会向上找globe,找到了就可以正常使用。
解决的话,在每个函数重新声明一个变量,把上层的变量的值赋给它。

编橙之家文章,

评论关闭