如何在Python 3的函数内部更新全局变量?
当然可以在函数内部更新全局变量,你的代码问题出在语法细节上
你完全可以在函数里修改全局变量!你的代码没生效,核心问题是**global关键字的用法写错了**——你把global声明和变量初始化堆在了同一行,而且还放在了函数外面,这根本没起到告诉函数“我要操作全局变量”的作用。
先拆解下你的原代码问题:
global current_minimum current_minimum = 0 def update(): current_minimum = -0.1 _ = update() print(current_minimum) # 输出0
这里的global写在函数外毫无意义,而且就算写在函数里,也不能和赋值语句放同一行。Python会把这种写法当成“声明全局变量current_minimum,然后创建一个局部变量current_minimum并赋值0”,完全不是你想要的效果。
正确的实现方式
要修改全局变量,必须在函数内部用单独的一行声明global [变量名],明确告诉Python:“接下来要操作的这个变量是全局作用域里的那个”,然后再进行赋值。
修正后的代码:
# 先在全局作用域初始化变量 current_minimum = 0 def update(): # 单独一行声明要使用的全局变量 global current_minimum # 现在赋值的就是全局变量了 current_minimum = -0.1 update() print(current_minimum) # 现在会输出-0.1
额外小贴士
- 如果只是读取全局变量的值,不需要
global声明;但只要是要修改它,就必须加这个声明,否则Python会默认创建一个同名的局部变量,和全局变量完全无关; - 既然你确定不会并行执行优化步骤,那这种全局变量的用法是安全的,不用担心多线程下的竞态问题,可以放心用它来记录当前最小值并保存数据。
内容的提问来源于stack exchange,提问作者O.rka
相关产品推荐
相关产品推荐

