鱼C论坛

 找回密码
 立即注册
查看: 979|回复: 5

python入门第66节

[复制链接]
发表于 2021-5-16 10:07:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-16 10:13:38 | 显示全部楼层
你没有点已满18周岁,也就没有调用函数callback的时候外面的var按照外面的来。
一旦调用了函数,就以函数中的局部变量var.set内容来打印。
所以局部变量并没有影响到外部,在没有调用函数的时候,外部的var依然是按照外部设定好的内容打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-16 10:32:00 | 显示全部楼层
本帖最后由 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这种修改文本不算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 10:51:11 | 显示全部楼层
你调用了函数,你又没有给函数里面传参数,这里面函数是不知道外面有var这个变量的,所以这个var就按照函数自己设置的算。
回到代码里面在没有按下按钮前,callback函数并没有被调用,所以var的内容就是外部变量的内容;
按下按钮后,因为返回的结果command的内容就是调用函数,所以当然不会去看函数外面的东西。也就是说,如果你设置了后续操作,能够回到函数外面的话,var的内容也会自然变回外部变量的内容了。
用你的例子来说,var = 10 是函数外部变量,var = 5是局部变量,如果你不调用函数那么打印var就是10,如果打印调用函数,那么打印出来的就是5.
如果还不明白我弄个简单的代码给你运行看看:
  1. def test():
  2.     var = 5
  3.     return var

  4. var = 10
  5. print(var)  # 此处打印外部变量var = 10的值
  6. print(test())   # 调用了test函数,返回的虽然也是var,
  7.                 # 但函数不知道外面也有var变量,所以只按照局部变量返回,打印5。
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 10:59:54 | 显示全部楼层
局部变量在调用函数的时候就按照局部变量的内容来,当你调用完函数之后,在外部又要使用这个变量时,就按照外部的来,
用小甲鱼的话来说就是我的地盘我做主,外部就不是这个函数的地盘了,调用这个变量就是外部申明的变量。
但是在调用函数的时函数是只看自己内部有没有这个变量的,如果你不定义var直接在函数里面print(var),而又没有给函数传递参数var,
函数甚至会报警认为并没有这个变量,就会报错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-16 11:01:33 | 显示全部楼层
Hoiste 发表于 2021-5-16 10:51
你调用了函数,你又没有给函数里面传参数,这里面函数是不知道外面有var这个变量的,所以这个var就按照函数 ...

多谢多谢,理解错用法了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表