Python 中函数外部的局部变量[重复]

问题描述 投票:0回答:1

我有一个这样的代码

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 ,这样我就可以在其他东西中使用它们,但它不起作用

我尝试将函数a写为正常且全局的函数外部的双数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:name'number_of_q'未定义) 有人可以帮我吗?

python function variables global local
1个回答
0
投票

下面创建了 StringVar 组。

update_fltdb
函数将 StringVar 组镜像到
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}')
        (ent := 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()
© www.soinside.com 2019 - 2024. All rights reserved.