1. 原理

L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:global,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:局部作用域>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

x = int(10) #python内置作用域B
y = 2 #当前模块中的全局变量G
def outfuction():outfx = 2 #外层作用域Edef infunction():infx = 3 #局部作用域L

2. 作用域产生的场景

  • 会引入新的作用域:module,class,def
  • 不会引入新的作用域:if,for,try--except
  • 注意:如果在外部引用局部变量,本质已经变成“在外部定义或者引用了一个新的全局变量”,如:

    x = 123 #全局G
    def test_1():
    x = 345 #局部变量x是L,屏蔽了作为G的x
    print(x) #345

    test_1() #345
    print(x, '\n') #123,这里的x是G

    def test_2():
    y = 456 #局部变量y
    print(y)

    test_2() #456
    y = 'haozhang' #等价于创造了新的全局变量y
    print(y) #haozhang
    test_2() #456

在函数内部却要访问全局变量:用global

x = 1
def outfx():global x  #global改变了G区变量print(x)   #1x = 2
outfx()
print(x)   #2

内部函数访问嵌套的父函数的变量:用nonlocal

def outfx():x = 1 def infx():nonlocal x  #nonlocal改变了E区变量x = 2print(x) #2infx()print(x)    #2
outfx()

3. 参考文献:

http://blog.csdn.net/ldzhangyx/article/details/49475159

转载于:https://www.cnblogs.com/LS1314/p/8504512.html

28-高级特性之作用域(2)相关推荐

  1. Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...

  2. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  3. 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...

  4. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 1 #演示切片 2 k="abcdefghijklmnopqrstuvwxyz" 3 #取前5个元素 4 k[0:5 ...

  5. 刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

    刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读! OpenStack Stein版本引入了新的多云编排功能,以及帮助实现边缘计算用例的增强功能. OpenStack由一系列相互关 ...

  6. python高级特性的学习

    Python的学习 Python的学习 高级特性 切片 迭代 列表生产式 生成器 迭代器 函数式编程 高阶函数 map/reduce filter sorted 返回函数 装饰器 偏函数 模块 使用模 ...

  7. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  8. C语言程序设计(三)高级特性

    C语言高级特性 前面我们了解了C语言的相关基础内容,我们来看看C语言的高级部分.这一章的学习难道会比较大,尤其是指针板块,因为需要理解计算机内存模型,所以说是很多初学者的噩梦. 函数 其实函数我们在一 ...

  9. python高级特性_Python高级特性

    参考原文 开篇:高级特性是用来简化我们常用操作的特性,合理利用高级特性可以使代码更简洁.明了. 切片 取list或tuple中的指定索引范围的操作,用循环十分繁琐,因此Python提供了切片(Slic ...

  10. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记

    前言 我在读 深入理解java虚拟机 这本书,把整体其中的关键点标记了,希望自己对它有个不一样的理解,也希望大家能看看这本写的很好的书 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) pd ...

最新文章

  1. 在近期,美众议院为何密集提出了15项新兴技术法案?
  2. 关于hql一些不常见但好用的技巧(个人总结)
  3. Django REST framework API 指南(25):状态码
  4. T-SQL 根据年月日创建DateTime
  5. ftp 上传文件夹_命令行连接FTP服务器
  6. 【c++ templates读书笔记】【4】技巧性基础知识
  7. Oracle 常用系统数据查询SQL(转)
  8. 【安装包】PhpStorm-2018.1
  9. HTTP MIME 类型
  10. Canny算法解析,opencv源码实现及实例
  11. qemu模拟器下编译运行基于riscv指令集的Linux操作系统
  12. delphi 2010 mysql_Delphi 2010和MySQL
  13. 百度万年历接口实现和分析
  14. IT运维服务整体方案(资料下载)
  15. 在Windows服务器安装禅道
  16. 使用 Scrapy 框架对重复的 url 无法获取数据,dont_filter=True
  17. zynq获取程序运行时间
  18. Linux这些年经历了什么?
  19. 程序员面试金典-刷题笔记
  20. 回字的四种写法之编程

热门文章

  1. bzoj 2844: albus就是要第一个出场 高斯消元
  2. Android 编程下帧动画在 Activity 启动时自动运行的几种方式
  3. 关于医学院网络中心成立工作室的设想
  4. ilistT 与listT 之间的相互转换
  5. android--系统jar包引用
  6. GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读
  7. 37 | 案例篇:DNS 解析时快时慢,我该怎么办?
  8. 8.12-14 df 、mkswap、swapon、swapoff、sync
  9. qhfl-7 结算中心
  10. 获得有向无环图中起点到终点的所有路径_力扣1514——概率最大的路径