《Python学习手册》学习笔记(17)之第17章作用域(关键词:编程语言/Python/作用域/global/nonlocal)
来源:互联网 发布:企业网站cms 编辑:程序博客网 时间:2024/06/05 18:33
第17章 作用域
(读者:
Python作用域:变量定义以及查找的地方。
参数传递:传递给函数作为其输入对象的方式。
在代码中的何处给一个名字赋值,对于确定这个名字的含义很关键。
)
Python作用域基础
(读者:
Python创建、改变或查找变量名都是在所谓的命名空间(一个保存变量名的地方)中进行的。
在代码中变量名被赋值的位置决定了这个变量名能被访问到的范围。
Python将一个变量名被赋值的地点关联为(绑定给)一个特定的命名空间。
在代码中给一个变量赋值的地方决定了这个变量将存在于哪个命名空间,也就是它可见的范围。
)
一个变量的作用域(它所使用的地方)总是由在代码中被赋值的地方所决定,并且与函数调用完全没有关系。
作用域法则
(读者:
- 赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量。如果需要给一个在函数内部却位于模块文件顶层 的变量名 赋值,需要在函数内部通过global语句声明。如果需要给位于一个嵌套的def中的名称赋值,从Python3.0开始可以通过在一条nonlocal语句中声明它来做到。
原处改变对象并不会 把变量划分为本地变量,实际上只有对变量名赋值才可以。例如,如果变量名L在模块的顶层被赋值为一个列表,在函数内部的像L.append(X)这样的语句并不会将L划分为本地变量,而L = X却可以。通常:记住名称和对象之间的清楚的区分是有帮助的:修改一个对象并不是对一个名称赋值。
)
变量名解析:LEGB原则
(读者:
三条简单的原则。对于一个def语句:
- 变量名引用分为三个作用域进行查找:首先是本地,之后是函数内(如果有的话),之后是全局,最后是内置。
- 在默认情况下,变量名赋值会创建或者改变本地变量。
- 全局声明和非本地声明将赋值的变量名映射到模块文件内部的作用域。
)
作用域实例
内置作用域
在Python 2.6中违反通用性
global语句
最小化全局变量
(读者:这就是使用全局变量的问题:不像那些依赖于本地变量的由自包含的函数构成的代码,全局变量使得程序更难理解和使用。)
最小化文件间的修改
其他访问全局变量的方法
(读者:有点复杂,没看懂。)
作用域和嵌套函数
嵌套作用域的细节
嵌套作用域举例
nonlocal语句
nonlocal基础
nonlocal应用
为什么使用nonlocal
本章小结
本章习题
习题解答
参考文献:
1.《Python学习手册》。
阅读全文
0 0
- 《Python学习手册》学习笔记(17)之第17章作用域(关键词:编程语言/Python/作用域/global/nonlocal)
- python变量作用域(global and nonlocal)
- 《Python学习手册》学习笔记(2)之第2章Python如何运行程序(关键词:编程语言/Python)
- 《Python学习手册》学习笔记(4)之第4章介绍Python对象类型(关键词:编程语言/Python)
- 《Python学习手册》学习笔记(10)之第10章Python语句简介(关键词:编程语言/Python/语句)
- 《Python学习手册》学习笔记(1)之第1章问答环节(关键词:编程语言/Python)
- 《Python学习手册》学习笔记(3)之第3章如何运行程序(关键词:编程语言/Python)
- 《Python学习手册》学习笔记(5)之第5章数字(关键词:编程语言/Python/数字/整数/进制)
- 《Python学习手册》学习笔记(7)之第7章字符串(关键词:编程语言/Python/字符串)
- 《Python学习手册》学习笔记(16)之第16章函数基础(关键词:编程语言/Python)
- 《Python学习手册》学习笔记(18)之第18章参数(关键词:编程语言/Python/参数)
- 《Python学习手册》学习笔记(21)之第21章模块:宏伟蓝图(关键词:编程语言/Python/模块)
- 《Python学习手册》学习笔记(32)之第32章异常基础(关键词:编程语言/Python/异常)
- 《Python学习手册》学习笔记(33)之第33章异常编码细节(关键词:编程语言/Python/异常)
- 《Python学习手册》学习笔记(8)之第8章列表与字典(关键词:编程语言/Python/列表/字典)
- 《Python学习手册》学习笔记(11)之第11章赋值、表达式和打印(关键词:编程语言/Python/赋值/表达式/打印)
- 《Python学习手册》学习笔记(12)之第12章if测试和语法规则(关键词:编程语言/Python/if)
- 《Python学习手册》学习笔记(13)之第13章while和for循环(关键词:编程语言/Python/while/for)
- 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)
- Codeforces Round #439 B
- JAVA提高篇(15)--PipedOutputStream和PipedInputStream类用法
- c写文件
- 实习的一些感想
- 《Python学习手册》学习笔记(17)之第17章作用域(关键词:编程语言/Python/作用域/global/nonlocal)
- 用py-faster-rcnn训练自己的VOC数据集
- bzoj 4443: [Scoi2015]小凸玩矩阵
- leetcode2
- 51node 1351 吃点心
- 10月7日 c语言 输入一串字符,单词之间用空格隔开,统计其中有多少个单词
- 《Python学习手册》学习笔记(18)之第18章参数(关键词:编程语言/Python/参数)
- 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
- hdu1213 How Many Tables