1---变量的作用域

  在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。Python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定

2---高级语言对数据类型的使用过程

  一般的高级语言在使用变量时,都会有下面4个过程。当然在不同的语言中也会有着区别。
  1. 声明变量:让编辑器知道有这一个变量的存在
  2. 定义变量:为不同数据类型的变量分配内存空间
  3. 初始化:赋值,填充分配好的内存空间
  4. 引用:通过引用对象(变量名)来调用内存对象(内存数据)

3---作用域的产生

  就作用域而言,Python与C有着很大的区别,在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念

      注意:在if-elif-else、for-else、while、try-except\try-finally等关键字的语句块中并不会产成作用域

4---作用域的类型

    1)局部作用域L(local)

        包含在def关键字定义的语句块中,即在函数中定义的变量

        每当函数被调用时都会创建一个新的局部作用域。

        Python中也有递归,即自己调用自己,每次调用都会创建一个新的局部命名空间

        在函数内部的变量声明,除非特别的声明为全局变量,否则均默认为局部变量

        有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 ,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。所以,一般建议尽量少定义全局变量,因为全局变量在模块文件运行的过程中会一直存在,占用内存空间

     2)E(enclosing)嵌套作用域

        E也包含在def关键字中,E和L是相对的,E相对于更上层的函数而言也是L。与L的区别在于,对一个函数而言,L是定义在此函数内部的局部作用域,而E是定义在此函数的上一层父级函数的局部作用域。主要是为了实现Python的闭包,而增加的实现。

     3)G(global)全局作用域

        即在模块层次中定义的变量,每一个模块都是一个全局作用域。也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。
注意:全局作用域的作用范围仅限于单个模块文件内 

     4)B(built-in)内置作用域

        系统内固定模块里定义的变量,如预定义在__builtin__ 模块内的变量。

     5)变量名解析LEGB法则

        搜索变量名的优先级:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域

 #!/usr/bin/env python
#conding:utf8 globalVar = #G def test_scope():
enclosingVar = #E
def func():
localVar = #L
print __name__ #B

5---变量的修改

1)nonlocal关键字

    在L中修改E中的变量。这是Python3.x增加的新特性,在python2.x中还是无法使用。

6---详情还可见:

http://lib.csdn.net/article/python/60712#%E7%9B%AE%E5%BD%95

最新文章

  1. Java名字的由来
  2. iframe高度自适应(同域)
  3. 开发常用之在webstorm中使用cmd
  4. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
  5. uC/OS-II中includes块
  6. coreos安装
  7. COM/ATL 资料收集
  8. Netty源代码学习——ChannelPipeline模型分析
  9. 生活沉思录 via 哲理小故事(四)
  10. jQuery给input绑定回车事件
  11. Python2和Python3安装教程
  12. CSS特例定位方式
  13. 使用PHP实现RSA算法的加密和解密
  14. WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
  15. linux远程目录共享
  16. 如何在Mac上搭建自己的服务器——Nginx
  17. superset链接本地mysql数据库
  18. [日常工作] Linux与Windows的连接访问以及数据共享等方法 vncserver smb xshell xftp winscp mount等
  19. CodeForces911D 逆序对
  20. shell 截取字符串

热门文章

  1. 洛谷 P1833 樱花
  2. tableau创建定量值地图
  3. javascript设计模式(1)——面向对象基础
  4. struts2模型驱动传值问题
  5. 对input type=file 修改样式
  6. UML-使用多态性和“Do It Myself”模式处理支付
  7. NOI2019退役记
  8. Java多线程通讯---------wait,notify区别
  9. Ubuntu 不插优盘无法启动
  10. MySQL读写分离如何实现?