我正在嘗試構建一個 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
提交
取消