清空列表或字典以便重复使用



我有一个脚本,看起来像这个

import tkinter as tk
from random import randint
a=[]
b=[]
c={}
d={}
def program():
a.append(1)
c[randint(10, 20)] = randint(0, 10) 
do_something()
do_something_else()
print(a)
print(b)
print(c)
print(d)
print('done')
return
def do_something():
b.append(15)
return
def do_something_else():
d[randint(10, 20)] = randint(0, 10)
return

root = tk.Tk()
tk.Button(root, text="Run", command=program).pack()
root.mainloop()

这里的问题是,单击按钮会使用列表和字典中以前的值再次运行函数program(),因此这些值只是附加的。每次调用program()时,我都想要一个空的dicts和list。

我创建了一个函数来实现这一点。

def empty():
global a,b,c,d
a=[]
b=[]
c={}
d={}
return

我看过很多关于在函数中不使用global的讨论。实现这一目标的巧妙方法是什么?

只需使变量成为program()的本地变量并将其传递:

import tkinter as tk
from random import randint
def program():
a=[]
b=[]
c={}
d={}
a.append(1)
c[randint(10, 20)] = randint(0, 10) 
do_something(b)
do_something_else(d)
print(a)
print(b)
print(c)
print(d)
print('done')

def do_something(b):
b.append(15)

def do_something_else(d):
d[randint(10, 20)] = randint(0, 10)

root = tk.Tk()
tk.Button(root, text="Run", command=program).pack()
root.mainloop()

现在,每次对program()的调用都以新的集合开始。

最新更新