在自定义函数中调用自定义函数,引发局部变量值自发改变的问题

问题:每次我点确定是会运行fun函数,fun函数里面我只想引用creatAuthCode里上一次运行的结果,但是每次运行fun函数 ,creatAuthCode函数也跟着运行,导致creatAuthCode每次输出的值都不一样,因此fun函数每次应用额函数也不一样,我只想做一个简单的登录带验证码数字的界面,并且当密码 账号 验证码输入正确 才显示登录成功。

from tkinter import *
import tkinter as tk
import random
#定义函数,功能为生成数字组成的6位随机验证码
def creatAuthCode():
    str1 = ""
    for i in range(2):
        ch = chr(random.randrange(ord('0'), ord('9') + 1))
        str1 += ch
    print(str1)
    txt.set(str1)
x= creatAuthCode    
#定义函数,判断输入是否正确
def fun():
    d1 = text1.get()
    d2 = text2.get()
    if d1=="1"and d2=="1" and code==creatAuthCode():
        w="登陆成功!"
    elif( d1==""or d2=="") :
        w="请输入正确的格式"
    else:
        w="输入错误!"  
    t.insert('insert',w)

#创建根窗口
root=Tk()
root.title("登录界面")
#root.resizable(False,False)
root.geometry("400x400")


#设置用户账号输入框
ID=Label(root,text="账号:")
ID.grid(row=0,column=1)
text1=Entry(root)
text1.grid(row=0,column=2)

#设置用户密码码输入框
password=Label(root,text="密码:")
password.grid(row=1,column=1)
text2=Entry(root)
text2.grid(row=1,column=2)

#设置验证码输入框
code=Label(root,text="验证码:")
code.grid(row=2,column=1)
code=Entry(root)
code.grid(row=2,column=2)



#设置获取验证码的按钮
txt=StringVar()
txt.set("点击")
codestr=Button(root,textvariable=txt,command=creatAuthCode,fg="red")
codestr.grid(row=2,column=3)


#设置登录按钮
c=tk.Button(root,text="确定",font=('宋体',20),command=fun)
c.place(relx=0.5,rely=0.8,anchor=CENTER)

#显示框
t=tk.Text(root,font=('Arial',20),height=1,width=20)
t.grid(row=4,column=2)

root.mainloop()




我想说的是你是否可以通过插入代码块的方式提供代码,这么贴进来不仅调格式费劲,代码也可能会错,没法调试啊

img

用闭包即可解决,内部函数的返回值作为外部函数引用,在闭包和闭包中间设变量,叫做内部变量,只会随着内部函数的调用而改变,在整个闭包外部的叫做全局变,两个函数都用的话都会影响。