Python中变量作用域问题——局部变量与全局变量
2015-10-28 21:56
936 查看
参考文章1:红黑联盟
1,关于几种函数的简称(非原创)
L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:global,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:局部作用域>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
以下代码能很好的表示它们之间的关系:
P.S. 局部作用域和外层作用域是相对而言的。
2,作用域是怎么产生的?
会引入新的作用域:模块(module),类(class)以及函数(def、lambda)
不会引入新的作用域:其它的代码块(如if、try、for等)
成功的例子:
失败的例子:
3,变量的修改:
一个不在局部作用域里的变量默认是只读的,如果试图为其绑定一个新的值,python认为是在当前的局部作用域里创建一个新的变量,也就是说在当前局部作用域中,如果直接使用外部作用域的变量,那么这个变量是只读的,不能修改。
如果没使用过这个变量,而直接赋值,会认为是新定义的变量,此时会覆盖外部作用域中变量(L > G)
3,那到底怎么修改呢?
答案是:运用global与nonlocal.
当变量在全局作用域上的时候,可以这么使用:
当变量在父作用域的时候,必须这么使用:
下一篇应该就是更深层次的东西了,希望能写写文件这方面的东西,还想顺带写写类和继承。——作者
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 #外层作用域E def infunction(): infx = 3 #局部作用域L
P.S. 局部作用域和外层作用域是相对而言的。
2,作用域是怎么产生的?
会引入新的作用域:模块(module),类(class)以及函数(def、lambda)
不会引入新的作用域:其它的代码块(如if、try、for等)
成功的例子:
if true: x = 3 print x
失败的例子:
def main(): x = 3 main() print x
3,变量的修改:
一个不在局部作用域里的变量默认是只读的,如果试图为其绑定一个新的值,python认为是在当前的局部作用域里创建一个新的变量,也就是说在当前局部作用域中,如果直接使用外部作用域的变量,那么这个变量是只读的,不能修改。
如果没使用过这个变量,而直接赋值,会认为是新定义的变量,此时会覆盖外部作用域中变量(L > G)
3,那到底怎么修改呢?
答案是:运用global与nonlocal.
当变量在全局作用域上的时候,可以这么使用:
x = 1 def outfx(): global x #global改变了G区变量 print x count = 2 print x outfx()
当变量在父作用域的时候,必须这么使用:
def outfx(): x = 1 def infx(): nonlocal x #nonlocal改变了E区变量 x = 2 print x infx() print x outfx()
下一篇应该就是更深层次的东西了,希望能写写文件这方面的东西,还想顺带写写类和继承。——作者
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法