Python使用布尔值终止while循环时函数返回值反复切换问题
问题核心原因
这是Python变量作用域规则导致的问题:
- 你在
keep_going()函数内部对go_on赋值时,Python会默认将go_on识别为函数内的局部变量,和你在函数外定义的全局go_on是两个完全独立的变量,所以函数内部对go_on的修改完全不会影响外部全局变量的值 - 你在while循环里调用
keep_going()时,没有接收函数的返回值,全局的go_on永远保持初始的False,所以循环不会终止
修复方案
方案1(优先推荐:避免全局变量副作用)
直接接收keep_going()的返回值更新全局go_on,不需要修改函数内部逻辑,修改后的完整代码如下:
go_on = False def keep_going(): further = input("input: ") if further == "n": go_on = True else: go_on = False return go_on while go_on == False: # 接住函数返回值更新全局变量 go_on = keep_going()
方案2(修改全局变量声明)
如果你需要在函数内部直接修改全局go_on,需要在函数开头添加global声明,告诉Python这个变量使用全局作用域的版本,修改后的完整代码如下:
go_on = False def keep_going(): # 声明使用全局变量go_on global go_on further = input("input: ") if further == "n": go_on = True else: go_on = False return go_on while go_on == False: keep_going()
内容的提问来源于stack exchange,提问作者vi_O.o
相关产品推荐
相关产品推荐

