在Python for循环中,如果将变量定义为for循环的元素,它会覆盖前面的定义吗?

在Python for循环中,如果将变量定义为for循环的元素,它会覆盖前面的定义吗?,python,tkinter,Python,Tkinter,因此,在本例中,虽然您不能再参考前面的loopRads,但python显然仍然知道它存在,对吗?这就是为什么当调用radiobutton小部件时,它能正常工作的原因?所以基本上Python知道当你点击单选按钮时你指的是哪个loopRad colors = ['red', 'blue', 'gold'] def radCall(*args): radSel = radVar.get() if radSel == 0: root.configure(backgro

因此,在本例中,虽然您不能再参考前面的loopRads,但python显然仍然知道它存在,对吗?这就是为什么当调用radiobutton小部件时,它能正常工作的原因?所以基本上Python知道当你点击单选按钮时你指的是哪个loopRad

colors = ['red', 'blue', 'gold']

def radCall(*args):
    radSel = radVar.get()

    if radSel == 0:
        root.configure(background=colors[0])
    elif radSel == 1:
        root.configure(background=colors[1])
    elif radSel == 2:
        root.configure(background=colors[2])

for col in range(3):
    loopRad = ttk.Radiobutton(root, text=colors[col], variable=radVar, value=col, command=radCall)
    loopRad.grid(row=5, column=col, sticky='w')

loopRad=ttk.Radiobutton(root,text=colors[col],variable=radVar,value=col,command=radCall)
中,您已经重新定义了以前分配给
loopRad
的任何值。 不仅重新分配是循环范围内的有效分配,它还将保留在循环之后


此外,在Python中,即使变量
loopRad
从未在范围(3):中col的
行之前声明,它仍然可以在循环范围之外访问。在其他一些语言中并非如此。

是的,因为它们都附加到其父级:
root
所以这是tkinter之外的另一个故事,对吗?或者它仍然适用?只要对数据的引用存在于某个地方,它就有效。如果您只是在for循环中创建某个变量,那么除非您将其存储/分配到其他对象中,否则它将无法在其他地方访问。在我的示例中,它之所以成为可能,是因为它附加到父对象?因此,在TKITER之外,如果你想在for循环中定义变量,那么你需要为循环中的每个元素创建一个变量吗?仅保留上次迭代时分配给
a
的值。由于使用了相同的变量名,因此覆盖了以前的所有值。如果您想在某种意义上保留这些值,您可以将它们附加到列表中,例如