素材牛VIP会员
如何理解python变量scope的这个问题?
 超***媒  分类:Python  人气:1008  回帖:1  发布于6年前 收藏
globe = 10

def 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

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv2 入门
青***f 页面重构设计 6年前#1

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取