Python基础-变量作用域
2024-09-27 10:19:54
1.函数作用域介绍
函数作用域
Python中函数作用域分为4种情况:
- L:local,局部作用域,即函数中定义的变量:
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的。
- G:global,全局变量,即模块级别定义的变量,在模块开始、函数外定义的变量。
- B:built-in,系统固定模块里的变量,比如int,bytearray等。
搜索变量的优先级顺序依次是:局部作用域 > 外层作用域 > 当前模块中全局作用域 > python内置作用域,也就是
L > E > G > B
实例说明:
2.作用域产生
Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的,如下代码:
- if 2 > 1 :
- x = 2
- print(x) #2
if并没有引入一个新的作用域,x仍处在当前作用域中,后面代码可以使用。
- def test():
- x = 2
- print(x) # NameError: name 'x' is not defined
def、class、lambda是可以引入新作用域的。
3.global关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:
age =
def change_age() :
global age # 声明一个age全局变量
print( '修改前: %s',age)
age =
print(' 修改后: %s', age )
change_age()
# 修改前:
#修改后 :
4. nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了。
def outer():
count =
def inner():
nonlocal count
print('修改前:%s',count)
count =
print('修改后:%s ' ,count)
inner()
print(count)
outer()
#修改前:
#修改后:
#
5.小结:
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python3新增的关键字。
最新文章
- 在公司里面,如何让笔记本连上wifi?
- MapGuide Maestro 5.1发布了
- 【HDU】2147 kiki's game
- innobackupex err2
- POJ 2486 Apple Tree(树形DP)
- The 5th Zhejiang Provincial Collegiate Programming Contest---ProblemF:Faster, Higher, Stronger
- Visual C++ unicode and utf8 转换
- PHP数组操作汇总
- Java接口修饰符详解
- 开源word操作组件DocX的记录
- 代码走查工具StyleCop建议采用的规则总结
- jsp如果超过字数就变成...
- Unity 特殊文件夹 Assets Resources StreamingAssets Editor Plugins......
- 浅析Spring MVC工作机制
- java 事件处理
- Django2.0 正则表示匹配的简单例子
- mysql数据库数据的 备份以及还原
- Redis集群架构【转载】
- mysql5.6优化
- VB网络编程中Winsock的使用
热门文章
- tomcat官方下载连接——安装版&;绿色版
- Android中获取手机电量信息
- scala mapPartitionsWithIndex函数的使用
- JSON和GSON的使用
- Treflection06_调用静态方法
- css tips —— 神奇的max-width,min-width, width覆盖规则
- js 小复习2
- 为啥YII2 会出现 mcrypt_generic_init(): Key size is 0
- uva 10891 区间dp+记忆化搜索
- vue2项目中better-scroll 插件使用时候页面不滚动