Python函数返回异常:guess无法更新外部变量,求非global解决方案
问题原因与解决方案
核心问题
你遇到的问题出在变量作用域和返回值接收上:
- 函数内部的
guess是局部变量,和全局的guess完全是两个独立变量,函数里修改局部guess不会影响外部的同名变量。 - 列表
guessList能正常更新,是因为它是可变对象,函数里操作的是同一个列表的引用;而字符串是不可变类型,无法通过函数内部修改直接同步到外部。 - 另外你代码里有个拼写错误:
return guess, guestList中的guestList应该是guessList,这会直接导致运行报错。
修正方案
不需要用global,只要在调用函数时接收返回值,就能更新外部的guess变量。同时修正拼写错误,完整代码如下:
incorrectGuesses = 0 guessList = [] guess = "" def userGuess(): # 获取用户猜测输入 guess = input("What do you think the organism is? ") # 检查特殊字符 specialCharacters = "!@#$%^&*()-+?_=,<>/" if any(c in specialCharacters for c in guess): print("Please do not include any special characters in your guess") # 暂时假设用户第二次输入符合规则 guess = input("What do you think the organism is? ") print("Awesome, you guessed", guess, "which is fine") guessList.append(guess) return guess, guessList # 修正拼写错误:guestList -> guessList else: print("Awesome, you guessed", guess, "which is fine") guessList.append(guess) return guess, guessList # 接收函数返回值,更新外部的guess和guessList guess, guessList = userGuess()
关键说明
通过guess, guessList = userGuess()这种方式,把函数返回的局部guess值赋值给全局的guess变量,既避免了global的不良实践,又实现了变量更新的需求。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

