我有一个脚本,看起来像这个
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()
的调用都以新的集合开始。