# 需求:在函数内修改全局变量
g_num = 100


def modify_value():
    # 声明要修改全局变量,这里不是再定义一个局部变量啦
    global g_num
    g_num = 200
    # 本意是要修改全局变量,但是这里其实是定义了一个局部变量,只不过局部变量的名字和全局变量的名字相同而已
    # g_num = 200
    print("在函数内修改全局变量,修改后全局变量的数据为:", g_num)


modify_value()
# 再次访问全局变量的时候,该数据应该是修改后的数据200
print("再次访问全局变量:", g_num)

#在函数内修改全局变量,修改后全局变量的数据为: 200
#再次访问全局变量: 200

总结: 在函数内修改全局变量需要使用global关键字

 

global 关键字的本质:表示声明要修改全局变量的引用,其实说白了就是要修改全局变量保存的内存地址

# 可变类型全局变量的使用 ===================================
g_list = []

# 通过函数修改全局变量的数据
def modify_value():
    # 因为g_list是列表类型,它属于可变类型,修改数据后内存地址不变。
    # 这里并没有对g_list变量的引用进行修改,所以不需要加上global
    # g_list.append("李四")
    # 在函数里面对全局变量进行重新赋值操作,相当于修改了全局变量的引用,需要加上global
    global g_list
    g_list = ["李四"]
    print("函数修改后全局变量的数据为:", g_list, id(g_list))


print("修改前:", g_list, id(g_list))
modify_value()
print("修改后:", g_list, id(g_list))
'''
修改前: [] 31257280
函数修改后全局变量的数据为: ['李四'] 39899072
修改后: ['李四'] 39899072
'''
# 不可变类型全局变量的使用 ==================
g_num = 10


def modify_value():
    # 表示声明要修改全局变量的引用,
    global g_num
    g_num = 20
    print("函数修改后全局变量的数据为:", g_num, id(g_num))


print("修改前:", g_num, id(g_num))
modify_value()
print("修改后:", g_num, id(g_num))
'''
修改前: 10 8791260280896
函数修改后全局变量的数据为: 20 8791260281216
修改后: 20 8791260281216
'''

总结:
global 关键字的本质:表示声明要修改全局变量的引用
不管是可变类型还是不可变类型只要对全局变量进行重新赋值,那么都需要在函数内加上global