Python 3.2.2错误局部变量

2024-09-29 00:16:25 发布

您现在位置:Python中文网/ 问答频道 /正文

gCharlie = 0
gJeff = 0

def Bob ():
    Charlie = gCharlie
    Jeff = gJeff
    Number = int(input("Hello and Welcome to Charlie's Number Guessing Game. Enter a nonnegative number from 0 to 10 not counting 0. "))

这段代码给出了python3.2中的错误:

^{pr2}$

这个局部变量误差是什么意思?在


Tags: andtogamenumberhelloinputdefint
3条回答

这可能是因为函数中有gCharlie =(注意:第一个字母是g)。在

使用参数而不是全局参数:

def bob(charlie=0, jeff=0):
    number = int(input("..."))
    # ...

bob(charlie=3)

在函数的作用域内,必须重新分配gJeff和gCharlie,它们将它们创建为新的局部变量。要告诉python您正在使用全局变量,请将函数的顶部改为如下所示。在

def Bob():
    global gCharlie
    global gJeff
    Charlie=gCharlie

在不告诉python您正在使用全局变量的情况下,它会尝试引用本地gCharlie和gJeff变量,正如它所说的那样,它们在您的函数中还没有被赋值。人们使用它的原因是他们只使用你发布的代码。只有在引用全局变量的函数中不更改它们的值时,才可以引用全局变量而不显式地这样说。在

通常,python按照以下顺序搜索变量名:local scope、它嵌套在其中的任何def、global、build-ins。因为gJeff和gCharlie是函数中的局部变量,它就到此为止了,除非你另有说明。在

如果你想看到这个,试着看看这个

^{pr2}$

这将输出

in main(1):  5 
in function:  0
in main(2):  5

因为在函数中,x被创建为一个新的局部变量。向useX函数添加一个全局x语句会将最后一行改为打印“0”而不是“5”

这意味着您在函数中没有显示的部分中赋值给gCharlie,因此Python编译器将其标记为局部变量。因此,你在它存在之前就访问了它。使用nonlocal或{}来求解。在

相关问题 更多 >