原创声明:本文系博主原创文章,转载及引用请注明出处。

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——变量的作用域相关推荐

  1. python变量生命周期_python 变量定义及变量生命周期

    第一部分 最近在写Python的时候发现一个好玩的现象,就是在if else重定义的变量,没有声明全局,在外部也可以使用, 这里涉及到一个python变量生命周期的问题. python能够改变变量作用 ...

  2. C语言中变量的作用域和生命周期

    一.作用域和生命周期: 1.作用域: 通常来说,一段程序代码中所用到的名字并不总是有效 / 可用 的.而限定这个名字的可用性的代码范围就是这个名字的作用域.俗话说的好,"能力越大,责任也就越 ...

  3. C++ 作用域与生命周期

    Pascal 之父 Nicklaus Wirth 曾经提出一个公式展示出了程序的本质:程序=算法+数据结构.后人又给出一个公式与之遥相呼应:软件=程序+文档.这两个公式可以简洁明了地为我们展示程序和软 ...

  4. 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定 ...

  5. 变量的作用域和生命周期

    目录 作用域 局部变量的作用域 局部变量的生命周期 生命周期 全局变量的作用域 全局变量的生命周期 作用域 作用域是程序设计概念,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性 ...

  6. C语言数据类型、变量、常量、作用域和生命周期的概念解释和案例

    目录 一.数据类型 二.变量 变量的命名: 变量的分类: 变量的使用: 三.常量 常量的定义和分类 四.变量作用域和生命周期 作用域: 生命周期: 一.数据类型 当我们去超市购物的时候,看到商品的标价 ...

  7. C语言初阶-C语言中的数据类型以及变量的作用域和生命周期,常量的类型

    看之前记得先点赞收藏呦!谢谢大家的支持! 目录 一.c语言中的数据类型 注意:这里的long型的定义是>=int所占字节数,所以占4个是没有问题的 二.变量和常量 1.变量的类型 2.变量的作用 ...

  8. 指针,c语言关键字,作用域,生命周期,内存数据存储

     作用域:变量可被访问的有效范围. 生命周期:变量存储空间的有效生存时间. extern int c;   通过关键字extern来告诉程序int c:是别的程序中定义的. extern int ...

  9. 存储类、作用域、生命周期、链接属性

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 补充:https://blog.csdn.net/oqqHuTu12345678/article/details/71214255 一.概念 ...

最新文章

  1. mysql数据类型默认长度_mysql数据类型长度
  2. java多线程基础篇第二篇-volidate关键字
  3. html+css复习之第2篇 | javascript
  4. 【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包
  5. IE6不能用gzip压缩脚本,一个流毒甚广的谣言
  6. CLion 中使用 C++ 版本的 OpenCV
  7. Linux服务器如何防御ARP***
  8. int类型究竟占几个字节
  9. XDU暑训2019 Day4 POJ2387
  10. 神经派考古学 - 推荐一个blog
  11. 微信小程序组件开发——可视化电影选座
  12. VS编译器下一个源文件出现多个mian函数
  13. 冰冻三尺,非一日之寒。数据解析——正则解析(2)
  14. python中forward是什么意思_pytorch 中forward 的用法与解释说明
  15. Processing 案例 | 去“富士山”看樱花从树上纷纷而落
  16. Dubbo监控中心的介绍与安装
  17. 堆外缓存OHCache使用总结
  18. Thinking in Java 中闪耀的星星(三)
  19. mit数据库 matlab,[zz]MIT-BIH开放数据库使用指南
  20. 各种计算机语言简短简介

热门文章

  1. apollo编译报错,Error No compiler is provided in this enviroment.Perhaps you are running on a JRE rather
  2. 又一主播逃税被罚!快手主播“驴嫂平荣”被追缴并罚款6200.3万元
  3. 贝壳反击浑水做空报告 股价上涨近6%
  4. FF:纳斯达克要求退市系误读 警示函仅与推迟提交Q3财报相关
  5. 中国电信:张志勇辞任公司执行副总裁
  6. 钱准备好!苹果官方账号泄密:iPhone 12明晚发布有戏
  7. iPhone 12将首次加入屏下指纹?都是为它铺路?
  8. 三星大翻身?Galaxy Fold已售出100万台,进账160亿元?结果尴尬了…
  9. 孙宇晨在线发钱,变身“人间王多鱼”之后,大家突然不讨厌他了?
  10. iQOO Pro 5G评测:配置彪悍定价亲民 成功拉低5G手机准入门槛