我正在尝试构建一个 tkinter GUI,但我遇到了 Python 编程逻辑问题。我的问题如下:我正在通过以下方式创建一堆对象:class Aplication: def createObjects(self): objects = [] for i in range(10): obj = Object(command = lambda: self.myFunction(i)) objects.append(obj) def myFunction(self, i): print(i)在执行每个对象的命令时,我期望的结果是:0123456789但相反,我得到:9999999999我简化了我的代码,这样任何了解 Python 逻辑的人都可以帮助我。提前感谢任何帮助。
1 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
这个稍作修改的版本可以如您所愿地工作。
它本质上是变量范围问题。i在您的实现中,该函数在运行时查找,何时i已更新为 9。如果要保留 的“当前”值i,则需要定义一个具有当前值的函数,i如下所示。
class Object:
def __init__(self, command):
self.command = command
class Application:
def createObjects(self):
objects = []
for i in range(10):
obj = Object(command = self.myFunction(i))
objects.append(obj)
return objects
def myFunction(self, i):
return lambda: print(i)
a = Application()
os = a.createObjects()
for o in os:
o.command()
添加回答
举报
0/150
提交
取消