有没有办法从函数内部更改全局值?
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
,只是它适用于更广泛的词法范围,而不是全局范围。
我目前正在玩贪吃蛇游戏,但我首先想要一个设置 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
,只是它适用于更广泛的词法范围,而不是全局范围。