Python中的变量作用域与命名空间(LEGB)

标签: Python 函数
2人阅读 评论(0) 收藏 举报
分类:
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,外部嵌套函数的命名空间(闭包中常见)
  • enclosing, 介于local和global之间的命名空间
  • global, 全局变量的空间
  • builtins,内建模块的命名空间。

Python   在启动的时候会自动为我们载⼊很多内建的函数、类,⽐如   dict,list,type,print,这些都位于    __builtin__    模块中可以使⽤ dir(__builtin__) 来查看。        

这也是为什么我们在没有 import任何模块的情况下,就能使⽤丰富的函数和功能了。在Python中,有⼀个内建模块,在该模块中有⼀些常⽤函数;在Python启动后,且没有执⾏程序员所写的任何代码前,Python会⾸先加载该内建模块到内存。        

另外,该内建模块中的功能可以直接使⽤,不⽤在其前添加内建模块前缀,其原因是对函数、变量、类等标识符的查找是按LEGB法则,其中B即代表内建模块⽐如:内建模块中有⼀个abs()函数,其功能求绝对值,如abs(-20)将返回20。
查看评论

Python基本语法_变量作用域LEGB

目录目录 软件系统 变量的作用域 高级语言对数据类型的使用过程 作用域的产生 作用域的类型 Llocal局部作用域 Eenclosing嵌套作用域 Gglobal全局作用域 Bbuilt-in内置作用...
  • Jmilk
  • Jmilk
  • 2015-12-10 01:31:09
  • 1737

Python 命名空间和LEGB规则

Python LEGB规则 命名空间
  • sxingming
  • sxingming
  • 2016-07-28 16:53:09
  • 808

Python 变量作用域 —— 命名空间与 LEGB 规则

一、命名空间白话一点讲:命名空间是对变量名的分组划分。不同组的相同名称的变量视为两个独立的变量,因此隶属于不同分组(即命名空间)的变量名可以重复。命名空间可以存在多个,使用命名空间,表示在该命名空间中...
  • HeatDeath
  • HeatDeath
  • 2017-05-03 09:12:15
  • 391

Python之道–LEGB法则

L—–local 局部名字空间E—–enclosing 直接外围空间G—–global 全局名字空间B—–builtin 内建名字空间在 Python 程序中创建、改变或查找变量名时,都是在一个保存变...
  • yming0221
  • yming0221
  • 2013-06-10 18:44:55
  • 3189

python中的LEGB 规则

Python   使⽤    LEGB    的顺序来查找⼀个符号对应的对象 locals    ->   enclosing    function    ->   globals    ...
  • xun527
  • xun527
  • 2017-08-06 22:44:36
  • 497

python 作用域查找规则

python在运行时候变量的作用域查找顺序以此是: local(局部变量)  -->enclosing-->global--->build-in 我们先解释一下初学者经常遇到name "xxx" ...
  • EDS95
  • EDS95
  • 2017-06-19 00:33:57
  • 620

python的LEGB原则

python中也存在闭包的概念,但是python的闭包不好的问题在于,默认是只读的,好在python3.0的版本支持了关键字nonlocal。看如下例子 def outer(): var = 0 ...
  • davidsu33
  • davidsu33
  • 2016-01-12 20:49:36
  • 568

Python 的变量作用域和 LEGB 原则

在 Python 程序中创建、改变或查找变量名时,都是在一个保存变量名的地方进行中,那个地方我们称之为命名空间。作用域这个术语也称之为命名空间。 具体地说,在代码中变量名被赋值(Python 中变量...
  • sunmeng_Alex
  • sunmeng_Alex
  • 2013-10-25 11:57:40
  • 920

Python中的LEGB规则

目标 命名空间和作用域——Python从哪里查找变量名?我们能否同时定义或使用多个对象的变量名?Python查找变量名时是按照什么顺序搜索不同的命名空间? 命名空间与作用域的介绍 命...
  • baidu_31333625
  • baidu_31333625
  • 2017-06-18 21:39:28
  • 627

几行代码理解Python变量访问的LEGB顺序

Python变量访问时有个LEGB原则,也就是说,变量访问时搜索顺序为Local ==> Enclosing ==> Global ==> Builtin,听起来好像很高深的样子,实际上很多语言也是这...
  • oh5W6HinUg43JvRhhB
  • oh5W6HinUg43JvRhhB
  • 2017-11-23 00:00:00
  • 190
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1万+
    积分: 1667
    排名: 3万+
    博客专栏
    文章存档
    最新评论