python变量的作用域及生命周期_Python——变量的作用域
原创声明:本文系博主原创文章,转载及引用请注明出处。
1. 在编程语言中,变量都有一定的作用域,用来限定其生命周期,且不同类型的变量作用域不同。
在Python中解释器引用变量的顺序(优先级)为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量
2. 在局部作用域中引用外部变量时(即比当前局部作用域块更大时),如果需要修改局部作用域以外的变量,需要显式声明为global变量。
在python3中引入了nonlocal关键字,用来区分全局变量和非局部变量,即有: global > nonlocal > local
1) global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字;
2) nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。
4. 函数定义了本地作用域,而模块定义的是全局作用域。如果想要在函数内定义全局作用域,需要加上global修饰符。
5. 变量名解析:LEGB原则
当在函数中使用未认证的变量名时,Python搜索4个作用域:
L:本地作用域,函数内部声明但没有使用global的变量;
E:上一层结构中def或者lambda的本地作用域;
G:全局作用域,函数中使用global声明的变量或在模块层声明的变量
B:内置作用域,即python的内置类和函数等。
并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程中都没有找到,Python就会报错。
补充说明:
上面的变量规则只适用于简单对象,当出现引用对象的属性时,则有另一套搜索规则:属性引用搜索一个或多个对象,
而不是作用域,并且有可能涉及到所谓的"继承"。
6. python中在模块层面定义的变量(无需global修饰),如果在函数中没有再定义同名变量,可以在函数中当做全局变量使用。
【参考资料】
python变量的作用域及生命周期_Python——变量的作用域相关推荐
- python变量生命周期_python 变量定义及变量生命周期
第一部分 最近在写Python的时候发现一个好玩的现象,就是在if else重定义的变量,没有声明全局,在外部也可以使用, 这里涉及到一个python变量生命周期的问题. python能够改变变量作用 ...
- C语言中变量的作用域和生命周期
一.作用域和生命周期: 1.作用域: 通常来说,一段程序代码中所用到的名字并不总是有效 / 可用 的.而限定这个名字的可用性的代码范围就是这个名字的作用域.俗话说的好,"能力越大,责任也就越 ...
- C++ 作用域与生命周期
Pascal 之父 Nicklaus Wirth 曾经提出一个公式展示出了程序的本质:程序=算法+数据结构.后人又给出一个公式与之遥相呼应:软件=程序+文档.这两个公式可以简洁明了地为我们展示程序和软 ...
- C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)
文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...
- 变量的作用域和生命周期
目录 作用域 局部变量的作用域 局部变量的生命周期 生命周期 全局变量的作用域 全局变量的生命周期 作用域 作用域是程序设计概念,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性 ...
- C语言数据类型、变量、常量、作用域和生命周期的概念解释和案例
目录 一.数据类型 二.变量 变量的命名: 变量的分类: 变量的使用: 三.常量 常量的定义和分类 四.变量作用域和生命周期 作用域: 生命周期: 一.数据类型 当我们去超市购物的时候,看到商品的标价 ...
- C语言初阶-C语言中的数据类型以及变量的作用域和生命周期,常量的类型
看之前记得先点赞收藏呦!谢谢大家的支持! 目录 一.c语言中的数据类型 注意:这里的long型的定义是>=int所占字节数,所以占4个是没有问题的 二.变量和常量 1.变量的类型 2.变量的作用 ...
- 指针,c语言关键字,作用域,生命周期,内存数据存储
作用域:变量可被访问的有效范围. 生命周期:变量存储空间的有效生存时间. extern int c; 通过关键字extern来告诉程序int c:是别的程序中定义的. extern int ...
- 存储类、作用域、生命周期、链接属性
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 补充:https://blog.csdn.net/oqqHuTu12345678/article/details/71214255 一.概念 ...
最新文章
- mysql数据类型默认长度_mysql数据类型长度
- java多线程基础篇第二篇-volidate关键字
- html+css复习之第2篇 | javascript
- 【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包
- IE6不能用gzip压缩脚本,一个流毒甚广的谣言
- CLion 中使用 C++ 版本的 OpenCV
- Linux服务器如何防御ARP***
- int类型究竟占几个字节
- XDU暑训2019 Day4 POJ2387
- 神经派考古学 - 推荐一个blog
- 微信小程序组件开发——可视化电影选座
- VS编译器下一个源文件出现多个mian函数
- 冰冻三尺,非一日之寒。数据解析——正则解析(2)
- python中forward是什么意思_pytorch 中forward 的用法与解释说明
- Processing 案例 | 去“富士山”看樱花从树上纷纷而落
- Dubbo监控中心的介绍与安装
- 堆外缓存OHCache使用总结
- Thinking in Java 中闪耀的星星(三)
- mit数据库 matlab,[zz]MIT-BIH开放数据库使用指南
- 各种计算机语言简短简介
热门文章
- apollo编译报错,Error No compiler is provided in this enviroment.Perhaps you are running on a JRE rather
- 又一主播逃税被罚!快手主播“驴嫂平荣”被追缴并罚款6200.3万元
- 贝壳反击浑水做空报告 股价上涨近6%
- FF:纳斯达克要求退市系误读 警示函仅与推迟提交Q3财报相关
- 中国电信:张志勇辞任公司执行副总裁
- 钱准备好!苹果官方账号泄密:iPhone 12明晚发布有戏
- iPhone 12将首次加入屏下指纹?都是为它铺路?
- 三星大翻身?Galaxy Fold已售出100万台,进账160亿元?结果尴尬了…
- 孙宇晨在线发钱,变身“人间王多鱼”之后,大家突然不讨厌他了?
- iQOO Pro 5G评测:配置彪悍定价亲民 成功拉低5G手机准入门槛