博客
关于我
python thread 共享数据
阅读量:797 次
发布时间:2023-04-03

本文共 1125 字,大约阅读时间需要 3 分钟。

Python变量查找规则与全局变量管理

在Python编程中,变量查找遵循一定的规则:先在函数内部查找局部变量,如果未找到再向全局查找。以下是相关知识点的详细说明:

1. 函数内部查找

在函数内部使用变量时,变量会优先在局部范围内查找。如果未找到,才会向全局范围内查找。以下示例展示了这一行为:

number = 1  # 全局变量def testGlobal():    number = 2  # 局部变量    return number

在上述代码中,当调用testGlobal()函数时,函数内部的局部变量number会被找到并返回值为2。全局变量number在此时不会被访问。


2. 全局变量查找

如果函数内部未定义变量,会从全局范围内查找该变量。以下示例展示了这一行为:

number = 1  # 全局变量def testGlobal():    return number

在上述代码中,函数testGlobal()未定义number变量,因此会从全局范围内查找并返回值为1。


3. 全局变量的使用

如果函数内部需要直接修改全局变量,必须使用global关键字声明。以下示例展示了这一行为:

number = 1  # 全局变量def testGlobal():    global number    number = 2    return number

在上述代码中,global number声明告诉编译器number变量指的是全局变量。函数执行后,全局变量number会被修改为2。


线程与全局变量

在多线程环境中,多个线程可能同时修改全局变量。由于Python使用GIL(全局解释锁),可以保证线程安全。以下示例展示了线程对全局变量的影响:

from threading import Threadimport timeg_num = 100  # 全局变量def work1():    global g_num    g_num += 1    print(f"work1, g_num: {g_num}")def work2():    global g_num    print(f"work2, g_num: {g_num}")t1 = Thread(target=work1)t1.start()  # work1, g_num: 101time.sleep(1)  # 让t1线程完成t2 = Thread(target=work2)t2.start()  # work2, g_num: 101

在上述代码中,两个线程同时修改全局变量g_num,最终值会变为101。由于GIL的存在,线程安全得到了保证。

转载地址:http://wgefk.baihongyu.com/

你可能感兴趣的文章
Oracle条件查询
查看>>
Oracle查看数据库会话连接
查看>>
Oracle查询前几条数据的方法
查看>>
oracle树形查询 start with connect by
查看>>
oracle毕业论文题目,历届毕业论文申报题目大全.doc
查看>>
oracle求助---win7下oracle配置相关疑问Starting Oracle Enterprise Manager 10g Database Control ...发生系统错误 5。
查看>>
Oracle流程控制语句
查看>>
oracle深度解析检查点
查看>>
Oracle游标
查看>>
oracle游标数最大数,Oracle 最大连接数 最大游标数
查看>>
oracle用户改名
查看>>
oracle用户解压不了,PLSQL developer 连接不上64位Oracle 的解决方法
查看>>
oracle用户解锁
查看>>
Oracle用游标删除重复数据
查看>>
Tomcat学习总结(19)—— 为什么首选Tomcat作为JavaWeb应用服务器?
查看>>
oracle的内置函数
查看>>
Oracle的存储结构
查看>>
Oracle的聚合函数group by结合CUBE和ROLLUP的使用
查看>>
Oracle监听配置、数据库实例配置等
查看>>
Oracle笔记(十三) 视图、同义词、索引
查看>>