python中global全局变量

**全局变量(global variable)**是变量的一种类型,区别于局部变量。若将一个变量声明为全局变量,则它所占的内存为全局内存,而不是本地工作区内存。因此全局变量就可以被所有工作区访问、修改。

1、「全局变量定义」和「函数内 global 声明」是两个不同作用的操作

python 复制代码
# 全局作用域:创建变量并初始化整个脚本内的所有函数都可以读取这个变量的值(无需额外声明)。
current_task_start_time = None  
current_task_type = None

def one():
	if True:
	  #这里的 global 并不是「重新定义变量」,而是给 Python 解释器一个明确的指令:
	  #"当我在这个函数内操作 current_task_start_time 时,不要把它当成局部变量,而是直接引用全局作用域中已经创建的那个同名全局变量"。
	  global current_task_start_time, current_task_type
	  current_task_start_time = utime.time()
	  current_task_type = 0x0022
	else:
	  global current_task_start_time, current_task_type
	  current_task_start_time = None
	  current_task_type = None

2、关键区分:「读取全局变量」和「修改全局变量」的不同要求
(1)仅读取全局变量:可以不用 global 声明

如果你的函数内只是获取全局变量的值,不修改它,那么即使不写 global 声明,也能正常工作,比如:

python 复制代码
current_task_start_time = None

def read_global_var():
    # 仅读取,无需global声明
    if current_task_start_time is None:
    print("当前无任务执行")
    return current_task_start_time

这是因为 Python 会按照「LEGB 查找规则」,在局部作用域找不到变量时,自动向上查找全局作用域的变量。
(2)修改全局变量:必须用 global 声明(核心!)

python 复制代码
current_task_start_time = utime.time()  # 赋值操作 = 修改全局变量

此时如果没有 global 声明,Python 会默认认为 current_task_start_time 是「局部变量」(即使全局作用域已经有同名变量),会在函数内创建一个新的局部变量,而不会修改全局变量,导致两个问题:

全局变量 current_task_start_time 的值永远不会被更新(始终是初始的 None);

若函数内先读取该变量再赋值,会直接报错 UnboundLocalError: local variable 'current_task_start_time' referenced before assignment(局部变量未定义就先使用)。

总结:

1、「全局变量定义」(函数外):创建变量,分配全局内存空间;

2、「函数内 global 声明」(函数内):指定变量作用域,告诉解释器 "操作的是全局变量";

3、仅读取全局变量:可省略 global;

4、修改全局变量:必须写 global 声明,即使变量已在全局定义,也不会有任何问题,反而能保证逻辑正确性;

5、global 声明必须位于 函数体的最顶层(所有局部代码块之外),不能嵌套在 if、for、try、while 等局部代码块中。

相关推荐
B站_计算机毕业设计之家2 小时前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏2 小时前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity3 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道3 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7653 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子3 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q3 小时前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手3 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手4 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集