奇怪的行为,为什么不能在函数中使用最外面的变量?

时间:2019-01-28 08:55:39

标签: python function variables

我为猜词游戏写了一个入门书。猜测之后,是否更新空白(正确或不正确的猜测)。这是代码:

blanks = "*********"
def check(word, guess):

    if guess == word:
        print("Correct guess: "+guess)
        blanks = word
        return blanks
    else:
        input("wrong guess (press any key)")
        return blanks

secretword = "Macedonia"
guess = input("type your guess: ")
result = check(secretword, guess)

实施check并满足else条件时,不能使用空格。但是可以使用if条件下的空格。

*当我注释blanks=word时,代码可以正常工作。

这是为什么?思想全局变量可以在任何地方引用。谢谢

为什么要投票?这个问题很清楚,不能重复,也没有挑衅性。这很有用。

2 个答案:

答案 0 :(得分:2)

确实可以在任何地方引用全局变量,但是当您将其分配给函数内部的变量时,除非您另行告诉Python,否则变量是整个函数中的局部变量。因此,函数内部的books与函数外部的blanks没有关系。

当代码采用blanks路径时,它将尝试引用本地else,但尚未分配任何值,因此您将获得异常blanks

要解决此问题,您必须告诉Python函数内部的分配是对全局UnboundLocalError的分配:

blanks

除非您使用def check(word, guess): global blanks ... rest of code global语句,否则函数内部任何地方的赋值都会使该变量在函数中的任何地方都是局部的。是否执行分配甚至是否可以执行都不重要:

nonlocal

答案 1 :(得分:-1)

变量blanks应该在方法check内定义,以便能够使用它。

def check(word, guess):
    blanks = ""
    if guess == word:
        print("Correct guess: "+guess)
        blanks = word
        return blanks
    else:
        input("wrong guess (press any key)")
        return blanks

OR

如果您想使用它globally

blanks = "*********"

def check(word, guess):
    global blanks
    if guess == word:
        print("Correct guess: "+guess)
        blanks = word
        return blanks
    else:
        input("wrong guess (press any key)")
        return blanks

secretword = "Macedonia"
guess = input("type your guess: ")
result = check(secretword, guess)