You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:15:03