gpt4 book ai didi

python - 下面的程序是如何运行的?

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:01 27 4
gpt4 key购买 nike

我是使用 Tkinter 模块进行一些非常基本的 GUI 编程的初学者。我试着运行这个程序,我从另一个网页复制了它的源代码。

    from Tkinter import *

def sel():
selection = "You selected the option " + str(var.get())
label.config(text = selection)

root = Tk()
var = IntVar()
R1 = Radiobutton(root, text="Option 1", variable=var, value=1,
command=sel)
R1.pack( anchor = W )

R2 = Radiobutton(root, text="Option 2", variable=var, value=2,
command=sel)
R2.pack( anchor = W )

R3 = Radiobutton(root, text="Option 3", variable=var, value=3,
command=sel)
R3.pack( anchor = W)

label = Label(root)
label.pack()
root.mainloop()

我的疑问是,每当我们在函数内部访问全局对象时,我们都必须这样写

    global object_name

然后函数才能正常工作,否则函数会创建自己的局部变量副本。那么我们为什么不在函数 sel() 的定义中做同样的事情呢?我尝试将以下语句添加到 sel() 的定义中?还有,

    global label
global var

并运行程序,但这对程序的运行没有任何影响。这是为什么?

最佳答案

修改全局变量时只需要global即可。

考虑以下示例:

myglobal = 'myglobal'

def test_global():
print myglobal

test_global()

myglobal #output

如果我们看一下字节码,我们会看到变量 myglobal 作为全局变量加载:

import dis

dis.dis(test_global)

2 0 LOAD_GLOBAL 0 (myglobal)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE

但是,如果我们定义 myglobal,我们会看到 myglobal 作为常量或局部变量加载。

import dis

def test_global():
myglobal = 'mylocal'

dis.dis(test_global)

2 0 LOAD_CONST 1 ('mylocal')
3 STORE_FAST 0 (myglobal)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE

如果我们尝试修改 myglobal 而不是简单地定义它:

myglobal += 'another string'

我们得到一个 UnboundLocalError 因为我们没有告诉 Python 变量 myglobal 是一个全局变量。像这样尝试:

global myglobal
myglobal += 'another string'

这会工作得很好。

关于python - 下面的程序是如何运行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com