17.3.20---python的变量作用域
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
17.3.20---python的变量作用域的更多相关文章
- Python基础-变量作用域
		
1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...
 - python的变量作用域问题
		
偶然掉进了一个坑里.仔细分析了下原因.原来是变量作用域的问题.简单抽象如下: id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 ...
 - python的变量作用域
		
import time global mark,sum def gaosi(Q): global sum,mark # 在 使用的时候防止隔离 也要声明一下 这个是全局变量 , 引用外面的值 sum+ ...
 - Python之变量作用域
		
使用 global强制声明为全局变量
 - Python中的变量作用域
		
python中变量作用域包括: L (Local) 局部作用域,函数内部声明但没有使用global的变量E (Enclosing) 闭包函数外的函数中,def或者lambda的本地作用域G (Glob ...
 - python 变量作用域、闭包
		
先看一个问题: 下面代码输出的结果是0,换句话说,这个fucn2虽然已经用global声明了variable1,但还是没有改变变量的值 def func1(): variable1=0 def fun ...
 - python  本地变量和全局变量  locals() globals() global  nonlocal    闭包   以及和 scala 闭包的区别
		
最近看 scala ,看到了它的作用域,特此回顾一下python的变量作用域问题. A = 10 B = 100 print A #10 print globals() #{'A': 10, 'B': ...
 - Python 变量作用域与函数
		
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
 - Python 3 学习笔记之——变量作用域、模块和包
		
1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...
 - python学习笔记三:函数及变量作用域
		
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
 
随机推荐
- 关于RxJS 处理多个Http请求 串行与并行方法
			
mergeMap mergeMap 操作符用于从内部的 Observable 对象中获取值,然后返回给父级流对象. 合并 Observable 对象 123456 import { of } from ...
 - 18 —— node 热部署工具 — supervisor /nodemon 。
			
1,全局安装: npm install -g supervisor 2,使用: —————————————————————————————— nodemon 和 supervisor 流程一致.
 - jQuery下拉框联动(JQ遍历&JQ中DOM操作)
			
1.下载jQuery,并导入:https://blog.csdn.net/weixin_44718300/article/details/88746796 2.代码实现: <!DOCTYPE h ...
 - HZNU-ACM寒假集训Day4小结  最短路
			
最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...
 - 吴裕雄--天生自然 JAVASCRIPT开发学习:条件语句
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
 - 谈谈我近一个半月的dp练习
			
前请提示:https://www.cnblogs.com/caiyishuai/p/9047991.html 配合这篇文章食用风味更佳哦! 首先十分感谢henry_y提供的50道dp练习,链接在这 ...
 - Java中String类为什么被设计为final?
			
Java中String类为什么被设计为final 首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...
 - clion之CMakeLists的学习
			
什么是CMake CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的" ...
 - 69.ORM查询条件:isnull和regex的使用
			
首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...
 - nodejs(15)express开启cors跨域
			
express开启cors跨域 package.json "dependencies": { "body-parser": "^1.18.3" ...