python3的全局变量和局部变量
2024-08-25 16:14:42
局部变量
- 定义在函数体内部的变量称为局部变量
- 函数的形参也是局部变量
- 局部变量的作用范围只在声明该局部变量的函数体内
- 局部变量在函数调用时被创建,在函数调用完成后自动销毁
全局变量
- 定义在函数体外,模块内的变量称为全局变量
- 全局变量在所有函数体内都可以进行访问
- 全局变量在函数体内不能直接修改绑定关系
a = 100
def test():
a = 50
print(a)
test()
print(a)
输出结果:
50
100
python3的作用域
作用域也叫命名空间,是访问时查找变量的范围空间
python3有四个作用域
作用域 | 英文解释 | 英文简写 |
局部作用域(函数内) | Local(function) | L |
外部嵌套函数作用域 | Enclosing function locals | E |
函数定义所在模块作用域 | Global(module) | G |
python内置模块的作用域 | Bui | B |
当访问一个变量的时候,变量查找顺序是先查找本地变量,然后是包裹此函数外部的函数内的变量,之后是全局变量,最后是內建作用域内的变量 。
在默认情况下,变量名赋值会在当前作用域内创建变量和修改变量。
v = 100 # 全局作用域
def fun1():
v = 200 # 外部嵌套函数作用域
print('fun1.v=', v)
def fun2():
v = 300 # 局部作用域
print('fun2.v=', v)
print(max) # max函数都没有创建,在内建函数作用域中,只读,不能改变
# 可以在其余三个作用域重新创建。
fun2()
fun1()
print("全局变量.v=", v)
print(max) # max变量定义在内置模块的作用域,是解释执行器提前定义好的
global关键字
作用
声明一个或多个变量,这些变量的作用域为模块级的作用域的变量,即全局变量
将赋值变量映射到模块文件内部的作用域
a = 10
def test():
global a
a = 5
print(a)
test()
print(a)
输出结果:
5
5
说明:
全局变量如果要在函数内部被赋值,则必须经过全局声明,否则会被认为是局部变量
不能先声明局部变量,再用global声明为全局变量
global变量列表里的变量名不能出现在次作用域内的形参列表
nonlocal语句
nonlocal声明的变量的作用域是外部嵌套函数作用域
def test():
a = 10
def test2():
nonlocal a
a = 5
print(a)
test2()
print(a)
test()
说明:
nonlocal语句只能在被嵌套函数内部进行使用
访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作
nonlocal语句的变量列表的变量名不能出现在此函数的参数列表里
最新文章
- JS判断用户手机是IOS还是Android
- POJ2778 DNA sequence
- MemCached add命令的用法详解
- 那些年我们用到的jquery选择器!!
- set[c++]
- 如何让Asp.net Web Api全局预防Xss攻击
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
- iOS实现自定义的弹出视图(popView)
- MySQL查询统计,统计唯一值并分组
- 简单的android启动跳转页面
- JS进阶 ] 分析JS中的异步操作
- 基于node的websocket示例
- java的优势解读
- PHP 中 config.m4 的探索
- C# 读取 Excel 最全最稳定的方式
- deepin 桌面突然卡死
- maya中的顶点平滑算法(vertex smooth algorithm)
- VMware-workstation12.5.6 新建虚拟机 安装 centos6.5
- STM32 一直进入串口接收中断
- Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》
热门文章
- php解决时间超过2038年
- ubuntu开机执行指令或脚本
- Linux主流发行版本
- 修改数据库中的内容报错:PropertyAccessException:Null value was assinged to a property of primitive type setter of
- 【译】微型ORM:PetaPoco【不完整的翻译】(转)
- Ansible 笔记 (2) - Ad-hoc 命令
- NAOQI API之学习笔记
- yndbtree控件
- Android-MediaPlayer-音频播放-异步准备
- Android-MediaPlayer-音频播放-普通准备