函数初始化变量异常:为何预期的全局变量未被正确赋值?
问题原因
在__init_abc函数中直接赋值a="a"、b="b"、c="c"时,Python会将这些变量视为局部变量,而非你定义的全局变量。函数执行结束后局部变量被销毁,全局的a、b、c根本没被修改,所以打印结果还是None None None。
解决方案
方案1:使用global关键字声明全局变量
在函数内部明确告诉Python,要操作的是全局作用域中的变量:
a,b,c = [None]*3 def __init_abc(): global a, b, c # 声明要操作全局变量 a="a" b="b" c="c" def print_abc(): __init_abc() print(a,b,c) print_abc()
执行后输出:a b c
方案2:通过函数返回值修改全局变量
如果不想使用global,可以让函数返回初始化后的变量值,再赋值给全局变量:
a,b,c = [None]*3 def __init_abc(): return "a", "b", "c" def print_abc(): global a, b, c # 声明要修改全局变量 a, b, c = __init_abc() print(a,b,c) print_abc()
或者直接在全局作用域完成赋值:
a,b,c = [None]*3 def __init_abc(): return "a", "b", "c" a, b, c = __init_abc() print(a,b,c)
内容的提问来源于stack exchange,提问作者Alexander Dvorin
相关产品推荐
相关产品推荐

