本文共 1125 字,大约阅读时间需要 3 分钟。
在Python编程中,变量查找遵循一定的规则:先在函数内部查找局部变量,如果未找到再向全局查找。以下是相关知识点的详细说明:
在函数内部使用变量时,变量会优先在局部范围内查找。如果未找到,才会向全局范围内查找。以下示例展示了这一行为:
number = 1 # 全局变量def testGlobal(): number = 2 # 局部变量 return number
在上述代码中,当调用testGlobal()函数时,函数内部的局部变量number会被找到并返回值为2。全局变量number在此时不会被访问。
如果函数内部未定义变量,会从全局范围内查找该变量。以下示例展示了这一行为:
number = 1 # 全局变量def testGlobal(): return number
在上述代码中,函数testGlobal()未定义number变量,因此会从全局范围内查找并返回值为1。
如果函数内部需要直接修改全局变量,必须使用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/