作用域

什么是命名空间

比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间

globals、locals

在之前学习变量的作用域时,经常会提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域

  • locals

  • globals

LEGB 规则

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

locals -> enclosing function -> globals -> builtins
  • locals,当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量

enclosing,外部嵌套函数的命名空间(闭包中常见)

def fun1(): a = 10 def fun2(): # a 位于外部嵌套函数的命名空间 print(a)

  • globals,全局变量,函数定义所在模块的命名空间
a = 1
def fun():
# 需要通过 global 指令来声明全局变量
global a
# 修改全局变量,而不是创建一个新的 local 变量
a = 2

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

  Python 在启动的时候会自动为我们载入很多内建的函数、类,
比如 dict,list,type,print,这些都位于 __builtin__ 模块中,
可以使用 dir(__builtin__) 来查看。
这也是为什么我们在没有 import任何模块的情况下,
就能使用这么多丰富的函数和功能了。 在Python中,有一个内建模块,该模块中有一些常用函数;在Python启动后,
且没有执行程序员所写的任何代码前,Python会首先加载该内建函数到内存。
另外,该内建模块中的功能可以直接使用,不用在其前添加内建模块前缀,
其原因是对函数、变量、类等标识符的查找是按LEGB法则,其中B即代表内建模块
比如:内建模块中有一个abs()函数,其功能求绝对值,如abs(-20)将返回20。

python作用域与LEGB规则的更多相关文章

  1. python——作用域之LEGB规则

    1 变量的作用域 Python是静态作用域,也就是说在Python中,变量的作用域源于它在代码中的位置:在不同的位置,可能有不同的命名空间.命名空间是变量作用域的体现形式. 2 LEGB各自代表的含义 ...

  2. Python中的LEGB规则

    目标 命名空间和作用域——Python从哪里查找变量名? 我们能否同时定义或使用多个对象的变量名? Python查找变量名时是按照什么顺序搜索不同的命名空间? 命名空间与作用域的介绍 命名空间 大约来 ...

  3. Python 的 LEGB 规则(转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498528588&src=3&ver=1&signature=DfFeOFPXy44ObCM ...

  4. python 作用域(LEGB)

    def fa(a): b = 200 c = 888 def fb(b): print(b) print(a) print(c) print(sum) return fb c = 2 sum = 10 ...

  5. 【Python】 命名空间与LEGB规则

    命名空间与LEGB规则 之前隐隐约约提到过一些关于Python赋值语句的特殊性的问题,这个问题的根源就在于Python中的变量的命名空间机制和之前熟悉的C也好java也好都不太一样. ■ 命名空间 所 ...

  6. LEGB规则

    链接:https://www.cnblogs.com/GuoYaxiang/p/6405814.html 命名空间 大约来说,命名空间就是一个容器,其中包含的是映射到不同对象的名称.你可能已经听说过了 ...

  7. 对于python 作用域新的理解

    今天看Python习题,看到如下题目 def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) ...

  8. python作用域和多继承

    python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d ...

  9. python作用域与命名空间

    什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...

随机推荐

  1. liunx的磁盘管理的基本命令

    df     查看磁盘占用率 du -sh    查看磁盘多大 sudo fdisk -l   查看硬盘信息 sudo mkfs -t ext3 /dev/sdb1    建立文件系统(相当于格式化) ...

  2. JavaScript高级程序设计——闭包

    前言 有很多人搞不清匿名函数和闭包这两个概念,经常混用.闭包是指有权访问另一个函数作用域中的变量的函数.匿名函数就是没有实际名字的函数. 闭包 概念 闭包,其实是一种语言特性,它是指的是程序设计语言中 ...

  3. MySQL Disk--SSD与RAID

    ===================================================SSD与RAID 51.在RAID 5这类Parity-RAID上存在partial-stripe ...

  4. smarty学习——高级知识

    1.Objects 对象 smarty允许通过模板访问PHP对象.有两种方式来访问它们.一种是注册对象到模板,然后通过类似于用户自定义函数的形式来访问它. 另一种方法给模板分配对象,然后通过访问其它赋 ...

  5. FastAdmin 怎么把模块设置默认的首页?

    F4NNIU: 参考 ThinkPHP5 的路由设置. fangke-河南: 或者看config.php Karson:需要把插件设置为默认首页吗?在后台就可以,设置他插件的为伪静态,即可.

  6. Apache+modproxy布置tomcat集群

    一.环境: Apache: 2.2.14: 下载地址:http://archive.apache.org/dist/httpd/binaries/win32/ Tomcat: 7.0.82 JDK1. ...

  7. 【转】每天一个linux命令(11):nl命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件 ...

  8. mysql复制表结构create table as和like的区别

    对于MySQL的复制相同表结构方法,有create table as 和create table like 两种,区别是什么呢? create table t2 as select * from t1 ...

  9. WPF ListView 简单的拖拽实现(转)

    首先设置ListView的AllowDrop=True:SelectionMode=Extended;并且ListView视图为GridVIew. private void listView1_Mou ...

  10. window下安装两个mysql服务

    产生这个想法主要是因为win系统之前装了mysql,服务名为mysql.又重新安装xampp,导致mysql冲突,xampp中的mysql始终启动不起来.   解决方法如下: 1.修改xampp中my ...