python global 关键字

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

背景

很多同学对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中修改的确实是全局变量
回帖
请输入回帖内容 ...