Python while循环中调用函数返回的user_input变量未更新如何解决
问题根源
- Python中函数内部直接赋值的变量默认是局部变量,你在
help_function和test_function里定义的user_input和全局的user_input是两个完全独立的变量,函数内部的赋值不会影响全局变量的值 - 你调用两个函数时虽然用return返回了新的输入值,但没有用变量承接返回值,全局的
user_input自然不会更新 - 额外注意:不要用
help作为自定义变量名,help是Python内置的帮助函数,覆盖后会导致内置功能无法正常使用
修复代码
# 把help变量改名避免覆盖内置函数 help_cmd = ["h", "e", "l", "p"] test_cmd = ["t", "e", "s", "t"] user_input = list(input("")) running = True def help_function(): # 你的功能逻辑[...] new_input = list(input("")) return new_input def test_function(): # 你的功能逻辑[...] new_input = list(input("")) return new_input while running: if user_input == help_cmd: # 用全局user_input承接函数返回的新输入 user_input = help_function() elif user_input == test_cmd: user_input = test_function() else: # 非匹配输入可根据需求自定义逻辑,比如提示错误后重新输入 user_input = list(input("请输入有效指令:"))
可选替代方案
如果你不想每次都手动承接返回值,也可以在函数内部用global关键字声明要修改全局变量,不过更推荐上面的返回值写法,代码可读性和可维护性更高:
def help_function(): global user_input # 你的功能逻辑[...] user_input = list(input(""))
内容的提问来源于stack exchange,提问作者Vito Palmieri
相关产品推荐
相关产品推荐

