在 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()