在 Python 中从循环创建不同的函数
Create different functions from loop in Python
我正在尝试构建一个 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)
并且在执行每个对象的命令时我期望的结果是:
0
1
2
3
4
5
6
7
8
9
但我得到的是:
9
9
9
9
9
9
9
9
9
9
我简化了我的代码,这样任何了解 Python 逻辑的人都可以帮助我。
提前感谢任何帮助。
这个稍作修改的版本如您所愿。
本质上是变量作用域的问题。
在您的实现中,当 i
已更新为 9 时,该函数会在运行时查找 i
。
如果你想保持 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()
我正在尝试构建一个 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)
并且在执行每个对象的命令时我期望的结果是:
0
1
2
3
4
5
6
7
8
9
但我得到的是:
9
9
9
9
9
9
9
9
9
9
我简化了我的代码,这样任何了解 Python 逻辑的人都可以帮助我。 提前感谢任何帮助。
这个稍作修改的版本如您所愿。
本质上是变量作用域的问题。
在您的实现中,当 i
已更新为 9 时,该函数会在运行时查找 i
。
如果你想保持 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()