子函数里面访问外面的变量是值捕获的,所以想要在里面修改外部主函数里的变量值,只能通过一个引用类型来作为中转,比如 dict 或者 class class Wrapper(): pass def func1(): def func2(): print(a) # 输出是 2 a = 2 wrapper_class.a = 2 wrapper_dict["a"] = 2 print("before func2", a, wrapper_class.a, wrapper_dict["a"]) func2() print("after func2", a, wrapper_class.a, wrapper_dict["a"]) a = 1 # 使用一个 class 来保存变量 wrapper_class = Wrapper() wrapper_class.a = 1 # 使用一个 dict 来保存 wrapper_dict = {} wrapper_dict["a"] = 1 print("before func1", a, wrapper_class.a, wrapper_dict["a"]) func1() print("after func1", a, wrapper_class.a, wrapper_dict["a"])