python global 关键字

本贴最后更新于 1431 天前,其中的信息可能已经时异事殊

背景

很多同学对global关键字的使用不太明白,今天就写篇文章给大家梳理一下。

首先讲到global关键字,必须要明白变量的作用域,我们就从变量作用域开始讲。

变量作用域

全局变量:函数外部定义的变量,整个py文件都能使用

局部变量:函数内部定义的变量,仅函数内部使用

global关键字

作用:将局部变量变成全局变量

使用场景:需要跨函数使用变量的时候使用

语法:

使用的时候要先声明再赋值 global variable_name variable_name = 'values'

使用举例

使用全局变量

def test01(): global test_list test_list=[1,2,3] print('test01中打印全局变量内存地址:',id(test_list)) print('test01中打印全局变量test_list=',test_list) def test02(): test01() #test_list.append(4) print('test02中打印全局变量内存地址:',id(test_list)) print('test02中修改全局变量test_list=',test_list) test02() 输出: test01中打印全局变量内存地址: 4314080264 test01中打印全局变量test_list= [1, 2, 3] test02中打印全局变量内存地址: 4314080264 test02中修改全局变量test_list= [1, 2, 3] 结论: 1. 两个函数中打印全局变量内存地址和值一模一样 2. 说明test02使用的确实是test01修饰的全局变量

修改全局变量(全局变量为不可变类型)

def test01(): global test_list test_str='teststr' print('test01中打印全局变量内存地址:',id(test_str)) print('test01中打印全局变量test_list=',test_str) def test02(): test01() test_str = 'update_teststr' print('test02中打印全局变量内存地址:',id(test_str)) print('test02中修改全局变量test_list=',test_str) test02() 输出: test01中打印全局变量内存地址: 4516881216 test01中打印全局变量test_list= teststr test02中打印全局变量内存地址: 4517123504 test02中修改全局变量test_list= update_teststr 结论: 1. test01,test02打印全局变量内存地址和值都不一样 2. 说明当global修饰的全局变量为不可变类型时,test02去修改相当于test02创建了一个局部变量

修改全局变量(全局变量为可变类型)

def test01(): global test_list test_list=[1,2,3] print('test01中打印全局变量内存地址:',id(test_list)) print('test01中打印全局变量test_list=',test_list) def test02(): test01() test_list.append(4) print('test02中打印全局变量内存地址:',id(test_list)) print('test02中修改全局变量test_list=',test_list) test02() 输出: test01中打印全局变量内存地址: 4334141320 test01中打印全局变量test_list= [1, 2, 3] test02中打印全局变量内存地址: 4334141320 test02中修改全局变量test_list= [1, 2, 3, 4] 结论: 1. test01、test02打印出来的内存地址一样,修改之后打印出来的值不一样 2. 说明test02中修改的确实是全局变量
回帖
请输入回帖内容 ...