我是Oython的新朋友。我写了一个简单的计算器,我不明白我们称之为“评估”的函数是如何工作的。 我知道我们在函数中有局部变量,除了我们将其定义为输出之外,函数无法在函数外部更改变量。
但是在此函数中,它将更改外部变量并定义新标签。
我希望我们输入ans
作为输入并接受输出。另一个奇怪的问题是我们没有提供e
作为输入,但是此函数使用带有e
注释的变量e.get()
。当我们没有将变量e
赋予函数时,函数如何知道它,
我的第二个问题是“配置”如何工作?
这是我的代码:
from tkinter import*
root=Tk()
label1 = Label(root,text="Enter your expression:")
label1.pack()
def evaluate(event):
data=e.get()
ans.configure(text="Answer:"+ str(eval(data)))
e = Entry(root)
e.bind("<Return>",evaluate)
e.pack()
ans = Label(root)
ans.pack()
root.mainloop()
答案 0 :(得分:0)
函数起作用的原因是因为Python可以接受这种情况。
当Python无法找到ans
作为局部变量时,Python将首先尝试编辑局部变量,然后假定它必须位于全局名称空间中,然后在此处进行检查。这并不总是有效,但如果条件合适,则可以。
这是一个代码示例,显示了该函数将在何处正确猜测变量是全局变量,以及一个失败的函数。
import tkinter as tk
root = tk.Tk()
def print_some_number():
some_number = some_number + 5
print(some_number)
def testing():
lbl.configure(text="After button press")
some_number = 5
lbl = tk.Label(root, text="Before button press")
lbl.pack()
tk.Button(root, text="Update lavel", command=testing).pack()
tk.Button(root, text="Print some number", command=print_some_number).pack()
root.mainloop()
print语句功能将失败,因为我们尝试在分配之前分配局部变量。我们知道它已经在全局中分配,但是该功能不会检查,因为它看起来像我们在尝试本地分配。解决此问题的方法是通过添加如下所示的全局语句:
import tkinter as tk
root = tk.Tk()
def print_some_number():
global some_number # global added here for this kind of fuction
some_number = some_number + 5
print(some_number)
def testing():
lbl.configure(text="After button press")
some_number = 5
lbl = tk.Label(root, text="Before button press")
lbl.pack()
tk.Button(root, text="Update lavel", command=testing).pack()
tk.Button(root, text="Print some number", command=print_some_number).pack()
root.mainloop()