python中的LEGB 规则

Python   使    LEGB    的顺序来查找⼀个符号对应的对象

locals    ->   enclosing    function    ->   globals    ->    builtins

局部变量———闭包空间———全局变量———内建模块

a    =    1        #    全局变量   globals

def   fun():

a    =    2        #    闭包变量   enclosing

def    inner_fun():

a    =    3        #    局部变量    locals                                

 print("a=%d"    %    a)      # 内建模块 builtins       

 return    inner_fun

f    =    fun()

f()

 

locals,当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量 enclosing,外部嵌套函数的命名空间(闭包中常见)

def    fun1():        

a    =    10         

def    fun2()#    a    位于外部嵌套函数的命名空间

print(a)

globals,全局变量,函数定义所在模块的命名空间

a    =    1

def    fun()#    需要通过    global    指令来声明全局变量

global    a

#    修改全局变量,⽽不是创建⼀个新的    local    变量         

a    =    2

 

builtins,内建模块的命名空间。

Python    在启动的时候会自动为我们载⼊很多内建的函数、类,

    dictlisttypeprint,这些都位于    __builtin__    模块中可以使 dir(__builtin__) 来查看。        

这也是为什么我们在没有 import任何模块的情况下,就能使⽤丰富的函数和功能了。

Python中,有⼀个内建模块在该模块中有⼀些常⽤函数;Python启动后,且没有执程序员所写的任何代码前,Python⾸先加载该内建模块到内存。        

另外,该内建模块中的功能可以直接使⽤,不⽤在其前添加内建模块前缀         其原因是对函数、变量、类等标识符的查找是按LEGB法则,其中B即代表内建模块

如:内建模块中有abs()函数,其功能求绝对值,如abs(-20)将返回20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值