python入门第66节
本帖最后由 555666777 于 2021-5-16 11:01 编辑方法callback里的变量var不是局部变量吗?为啥不需要加global 就能影响全局变量啊?
import tkinter as *
def callback():
var.set('吹吧你,我才不信那')
root = TK()
frame1 = Frame(root)
frame2 = Frame(root)
var = StringVar()
var.set('下载内容有限制')
textLable = Lable(frame1,textvariable = var,justifyu = LEFT)
textLable.pack(side = LEFT)
photo = PhotoImage(file = '18.gif')
imLable = Lable(frame1,image = photo)
imLable.pack(side = RIGHT)
theButton = Button(frame2,text = '已满18岁', command = callback)
theButton.pack()
frame1.pack(padx = 10,pady = 10)
frame2.pack(padx = 10,pady = 10)
mainloop()
你没有点已满18周岁,也就没有调用函数callback的时候外面的var按照外面的来。
一旦调用了函数,就以函数中的局部变量var.set内容来打印。
所以局部变量并没有影响到外部,在没有调用函数的时候,外部的var依然是按照外部设定好的内容打印。 本帖最后由 555666777 于 2021-5-16 10:34 编辑
Hoiste 发表于 2021-5-16 10:13
你没有点已满18周岁,也就没有调用函数callback的时候外面的var按照外面的来。
一旦调用了函数,就以函数 ...
首先多谢回答,没调用之前我明白,但是调用之后不还是试图用局部var的内容修改全局var的内容吗?调用之后不是就有两个var.set了。还是说只有 全局 var = 10 局部 var = 5 这种赋值操作才算局部修改全局?var.set这种修改文本不算。 你调用了函数,你又没有给函数里面传参数,这里面函数是不知道外面有var这个变量的,所以这个var就按照函数自己设置的算。
回到代码里面在没有按下按钮前,callback函数并没有被调用,所以var的内容就是外部变量的内容;
按下按钮后,因为返回的结果command的内容就是调用函数,所以当然不会去看函数外面的东西。也就是说,如果你设置了后续操作,能够回到函数外面的话,var的内容也会自然变回外部变量的内容了。
用你的例子来说,var = 10 是函数外部变量,var = 5是局部变量,如果你不调用函数那么打印var就是10,如果打印调用函数,那么打印出来的就是5.
如果还不明白我弄个简单的代码给你运行看看:
def test():
var = 5
return var
var = 10
print(var)# 此处打印外部变量var = 10的值
print(test()) # 调用了test函数,返回的虽然也是var,
# 但函数不知道外面也有var变量,所以只按照局部变量返回,打印5。
局部变量在调用函数的时候就按照局部变量的内容来,当你调用完函数之后,在外部又要使用这个变量时,就按照外部的来,
用小甲鱼的话来说就是我的地盘我做主,外部就不是这个函数的地盘了,调用这个变量就是外部申明的变量。
但是在调用函数的时函数是只看自己内部有没有这个变量的,如果你不定义var直接在函数里面print(var),而又没有给函数传递参数var,
函数甚至会报警认为并没有这个变量,就会报错了。 Hoiste 发表于 2021-5-16 10:51
你调用了函数,你又没有给函数里面传参数,这里面函数是不知道外面有var这个变量的,所以这个var就按照函数 ...
多谢多谢,理解错用法了。{:5_110:}
页:
[1]