Python调用模块函数时模块内全局变量无法更新问题咨询
跨文件全局变量更新问题修复
核心问题原因
- 作用域冲突:
val.py中update函数的形参名与全局变量num重名,函数内部默认操作的是局部参数,不会触及模块全局的num - 不可变类型传值特性:整数属于Python不可变类型,你将
val.current()的返回值作为参数传入时,仅传递了值的副本,修改副本不会影响原全局变量 - 缺少全局变量声明:在函数内部修改模块级全局变量时,必须用
global关键字显式声明,否则Python会将被赋值的变量识别为局部变量,不会同步到全局作用域
修复后的代码
val.py 修改后代码
num = 0 # update the original value def update(): global num num += 1 return # get the current 'num' value def current(): return num
main.py 修改后代码
import val val.update() print(val.current()) # 输出为1,符合预期
扩展说明
如果需要支持自定义增量更新,可以修改update函数如下:
def update(step=1): global num num += step
调用时传入对应增量即可,例如val.update(3)会将全局num加3。
内容的提问来源于stack exchange,提问作者Anandakrishnan
相关产品推荐
相关产品推荐

