为何subtract函数无法修改begin变量,导致add函数无法输出1?
问题分析与解决
你的代码执行时会直接报错,根本走不到add()那一步。原因是Python的变量作用域规则:在函数内部给变量赋值时,解释器会默认把这个变量当成局部变量,但subtract()里的begin += 1是先读取再赋值,这时候局部的begin还没定义,就会抛出UnboundLocalError。
要修改全局变量begin,必须在函数内部用global关键字明确声明这个变量是全局的,修正后的代码如下:
begin = 0 def add(): print(begin) def subtract(): global begin begin += 1 subtract() add()
现在执行这段代码,subtract()会正确修改全局的begin值为1,add()就能输出1了。
另外补充一点:如果只是在函数内部读取全局变量(比如add()里的操作),不需要声明global,但只要涉及赋值操作,就必须用global明确告知解释器要操作的是全局变量。
内容的提问来源于stack exchange,提问作者Robert Sanchez
相关产品推荐
相关产品推荐

