python变量的作用域

(这里的解释不涉及类,因为类中的变量我们称为类的属性)

Python遵循LEGB原则:

以 L –> E –> G –>B 的规则查找

L(local)     函数内部:局部作用域 
E(Enclosing) 闭包函数外的函数中 
G(Global)    函数外:全局作用域 
B(Built-in)  内建作用域(暂时还搞不清楚和全局作用域的区别)

eg:

g_var = 1000                   #全局作用域变量
def fun():
    e_var = 100                #enclosing作用域变量
    def fun_in():
         l_var = 10             #局部作用域变量

全局变量在其它作用域中的使用

操作要求如下:

1.不修改全局变量的内存地址:(一旦修改就变成了该作用域下的变量,改变了该变量的作用域)

    #数据不可变类型
    eg:g_var_int = 123
    这种不可变类型的数据只要修改就会改变其内存地址,所以在其它作用域不能修改只能被引用

    #数据可变类型
    eg:g_var_list = [1,2,3]
        #在其它作用域:
            g_var_list.append(2)  #可行,没有改变其内存地址
            g_var_list = []       #不可行,改变了内存地址

  2.修改全局变量的内存地址,使其仍然为全局变量
      只要在修改之前添加一个global声明即可

    eg:g_var_list = [1,2,3]

        #在其它作用域:
            global g_var_list
            g_var_list = []       #改变了内存地址,但依然是一个全局变量

     #实际上就是在局部作用域用global声明了一个全局变量,从内存地址变化来看,此g_var_list已非彼g_var_list.

Enclosing作用域的变量在局部作用域中的操作和全局变量在其它作用域中是一样的,只是global关键字要修改成nonlocal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值