有没有办法从函数内部更改全局值?

Is there a way to change a global value from inside a function?

我目前正在玩贪吃蛇游戏,但我首先想要一个设置 window 来显示 up.i 为此使用了 tkinter。在较小的项目中,我只是将所有代码写入了 pressButton 函数,但我现在想要非 spagetti 代码,所以我不会这样做。问题是,我不知道如何将输入括号中输入的值作为全局变量从 pressButton 函数和 settingsWin 函数中获取到我的主代码中。问题是我将该函数用作按钮的命令,所以我不能使用“return”。您可以从函数内部直接更改主代码中的全局变量吗?如果是如何?或者还有另一种方法可以解决这个问题吗? 我的代码:

def settingsWin():

    def pressButton():
        len = entryLen.get()
        wid = entryWid.get()
        speed = entrySpeed.get()
        print(len+wid+speed)
        SettingsWin.destroy()
        return len

    SettingsWin = Tk()
    SettingsWin.geometry("600x600")
    SettingsWin.title("Settings")
    label1 = Label(SettingsWin, text="playing field [tiles]")
    label1.pack()
    entryLen = Entry(SettingsWin, bd=2, width=20)
    entryLen.pack()
    label2 = Label(SettingsWin, text="X")
    label2.pack()
    entryWid = Entry(SettingsWin, bd=2, width=20)
    entryWid.pack()
    labelblanc = Label(SettingsWin, text="")
    labelblanc.pack()
    label3 = Label(SettingsWin, text="Speed [ms per tick]")
    label3.pack()
    entrySpeed = Entry(SettingsWin, bd=2, width="20")
    entrySpeed.pack()
    okButton = Button(SettingsWin, text="OK", command=pressButton)
    okButton.pack()


    SettingsWin.mainloop()

len = "len"
wid = "wid"
speed = "speed"

要求函数在函数外部的范围内更改变量通常表明代码有异味(可能在闭包的情况下除外,闭包非常有用),可以使用 global关键字:

greeting = "Hello world!"

def greet():
    global greeting
    greeting = "Goodbye world!"

print(greeting)

greet()

print(greeting)

通过将变量 greeting 声明为全局范围,在函数定义中更改变量允许函数影响全局变量。

如果您在嵌套子中工作,nonlocal 关键字将提供对内部子中外部子中变量的访问。它的工作方式类似于 global,只是它适用于更广泛的词法范围,而不是全局范围。