提问人:Meat_Mr8h 提问时间:11/1/2023 最后编辑:Mike 'Pomax' KamermansMeat_Mr8h 更新时间:11/1/2023 访问量:79
Python 中函数外部的局部变量 [duplicate]
local variables outside a function in python [duplicate]
问:
我有一个这样的代码
def inputs():
q_number = int(1)
number_of_q = int(0)
q = {}
x = {}
y = {}
xxxx = 1
for i in range(4):
C = float(qq[xxxx].get())
X = float(xxx[xxxx].get())
Y = float(yy[xxxx].get())
if C != 0 or C != "":
q[q_number] = C
x[q_number] = X
y[q_number] = Y
q_number += 1
number_of_q += 1
它工作正常,我唯一的问题是我正在尝试在函数之外打印重复的 q、x、y,这样我就可以在其他东西中使用它们,但它根本不起作用
我试图将函数编写为正常状态,并在函数外部全局双 q x y
def inputs():
q_number = int(1)
number_of_q = int(0)
q = {}
x = {}
y = {}
xxxx = 1
for i in range(4):
C = float(qq[xxxx].get())
X = float(xxx[xxxx].get())
Y = float(yy[xxxx].get())
if C != 0 or C != "":
q[q_number] = C
x[q_number] = X
y[q_number] = Y
q_number += 1
number_of_q += 1
global number_of_q, q_number, q, x, y
print(number_of_q, q_number, q, x, y)
但是程序给了我一个错误(NameError:未定义名称'number_of_q') 有人可以帮我吗?
答:
0赞
OysterShucker
11/1/2023
#1
下面创建 StringVar 组。该函数将 StringVar 组镜像为浮点值。我用 12 个 Entry 小部件和 Button 充实了它。update_fltdb
fltdb
import tkinter as tk
root = tk.Tk()
SVDB = ([], [], []) #groups of StringVar
fltdb = ([], [], []) #groups of float
#mirror SVDB as float results
def update_fltdb() -> None:
fltdb = ([], [], [])
for group, out in zip(SVDB, fltdb):
for sv in group:
try : out.append(float(sv.get()))
except:
sv.set('0.0')
out.append(0.0)
print(fltdb)
#build stringvar database
for x, group in enumerate(SVDB):
for y in range(4):
(sv := tk.StringVar(root)).set(f'{x}.{y}')
tk.Entry(root, textvariable=sv).grid(column=x, row=y, sticky='nswe')
group.append(sv)
#button
button = tk.Button(root, text='click', command=update_fltdb)
button.grid(column=x, row=y+1, sticky='e')
button.invoke() #update_fltdb
if __name__ == '__main__':
root.mainloop()
您可以解压缩为所需的任何名称。
q, x, y = fltdb
qv, xv, yv = SVDB
下一个:VBA 中变量值的意外覆盖
评论
qq[xxxx].get()
qq
if C != 0 or C != ""
int(1)