Python中函数内给全局变量赋值未生效问题咨询
问题核心原因
这是Python变量作用域的规则导致的,你的global关键字用法错误:
global的作用是在函数内部声明指定变量使用全局作用域的同名变量,你把global name写在全局作用域没有任何效果。- 你的
test函数内的name = "Function"默认会被识别为创建一个仅属于test函数的局部变量,和全局作用域的name是完全独立的两个变量,函数执行结束后这个局部变量就会被销毁,全局变量name从头到尾都没有被修改,所以print输出还是Original。
正确修改方案
只需要把global声明移到函数内部即可:
name = "Original" def test(): # 函数内部声明后续操作的name是全局变量 global name name = "Function" test() print(name)
修改后运行输出就是你预期的Function。
补充说明
Python的变量查找遵循LEGB规则,默认在函数内部对变量赋值时,不会自动关联全局同名变量,只会创建新的局部变量,如果要修改全局/外层嵌套作用域的变量,需要显式用global(修改全局变量)或者nonlocal(修改外层嵌套函数的变量)声明。
内容的提问来源于stack exchange,提问作者Rohan Pinto
相关产品推荐
相关产品推荐

